eyu-egg-dubbo
v0.1.11
Published
[![NPM version][npm-image]][npm-url] [![npm download][download-image]][download-url]
Downloads
32
Readme
eyu-egg-dubbo
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.