0.1.11 • Published 2 years ago

eyu-egg-dubbo v0.1.11

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

eyu-egg-dubbo

NPM version npm download

Install

$ npm i eyu-egg-dubbo --save

Usage

Register with the plugin list

// {app_root}/config/plugin.js
exports.eyuEggDubbo = {
  enable: true,
  package: 'eyu-egg-dubbo',
};

Project directory

- egg-project
    - app
        - dubbo
            - impl
                - example.js // The RPC service implementation, note that it should be the same as the proto file name
        - controller
        - service
    - config
        - config.default.js
        - plugin.js
    - dubbo
        - gen
            - example_dubbo.js // Automatically generated definition file
            - example_pb.js // Automatically generated definition file
        - proto
            - example.proto // Message protocol
    - package.json
    - buf.gen.yaml // Automatically generated protobuf configuration file
    - README.md

Initialize and generate protobuf configuration file

npx edubbo init

Generate definition file

npx edubbo gen

Configuration

// {app_root}/config/config.default.js
exports.eyuEggDubbo = {
  globalServiceVersion: '1.0.0',
  globalServiceGroup: 'eyu-egg-dubbo',
  // nacos naming registry
  registry: {
    serverList: [ '' ],
    namespace: '',
    username: '',
    password: '',
  },
  // services config for dubbo.client
  services: {
    foo: { // service name, note that it should be the same as the proto file name
      baseUrl: '', // service host
    },
    bar: {
      baseUrl: ''
    }
  },
};

see config/config.default.js for more detail.

Example

Message protocol(app/dubbo/proto/example.proto)

syntax = "proto3";

package apache.dubbo.demo.example.v1;

message SayRequest {
  string sentence = 1;
}

message SayResponse {
  string sentence = 1;
}

service ExampleService {
  rpc Say(SayRequest) returns (SayResponse) {}
  rpc Talk(SayRequest) returns (SayResponse) {}
}

Server

Configuring routes

// {app_root}/app/route.js
module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);

  router.dubbo({ serviceName: 'example' });
};

Service implementation

// {app_root}/app/dubbo/impl/example.js
const { Service } = require('egg');

class ExampleService extends Service {
  say(input) {
    const { ctx } = this;
    ctx.status = 200;
    ctx.body = {
      sentence: `You said: ${input.sentence}`,
    };
  }
  talk(input) {
    const { ctx } = this;
    ctx.status = 200;
    ctx.body = {
      sentence: `You talked: ${input.sentence}`,
    };
  }
}

Client

Configuration service

// {app_root}/config/config.default.js
exports.dubbo = {
  app: true,
  globalServiceVersion: '1.0.0',
  globalServiceGroup: 'eyu-egg-dubbo',
  services: {
    example: {
      baseUrl: 'http://127.0.0.1:7001',
    },
  },
};

Invoke service

// {app_root}/app/controller/home.js
const { Controller } = require('egg');

class HomeController extends Controller {
  async index() {
    const { ctx, app } = this;
    const res = await app.dubbo.client('example').say({ sentence: 'hello' });
    ctx.status = 200;
    ctx.body = res.sentence;
  }
}

module.exports = HomeController;

Questions & Suggestions

Please open an issue here.

License

MIT

0.1.11

2 years ago

0.1.10

2 years ago

0.1.9

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago