0.1.11 • Published 10 months ago

eyu-egg-dubbo v0.1.11

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months 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

10 months ago

0.1.10

10 months ago

0.1.9

10 months ago

0.1.8

10 months ago

0.1.7

10 months ago

0.1.6

10 months ago

0.1.5

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago