$ npm i egg-dubbo --save
// {app_root}/config/plugin.js
exports.eggDubbo = {
enable: true,
package: 'egg-dubbo',
};
// {app_root}/config/config.default.js
exports.dubbo = {
// 默认服务版本
version: '2.0.0',
// 默认超时时间
timeout: 6000,
// 服务列表
list: {
// 多服务配置, 例如goods表示商品系统应用的服务
goods: {
applicationName: 'your_application_ame',
register: 'your_zk_service',
dubboVer: '2.5.3'
}
}
};
see config/config.default.js for more detail.
'use strict';
module.exports = (app) => {
/**
* 商品RPC服务
*/
class GoodsRpcService extends app.RpcService {
constructor() {
super(app);
this.channel = 'goods'; // 自定义频道列表
this.interfaceUrl = 'com.xxx.product.goods.rpc.goods.service.RpcGoodsService'; // JAVA服务类
}
// ========= 业务签名 ========
/**
* 注册方法签名
*/
signature() {
this.methodSignature = {
// 依据商品ID获取商品信息
getSimpleGoods: (goodsId) => [{
'$class': 'java.lang.Long',
'$': goodsId
}],
// 依据商品对像查询商品关联列表
selectByPage: (good) => [
{
$class: 'com.xxx.product.goods.rpc.goods.query.RpcGoodsInfoQuery',
$: {
cid: { $class: 'java.lang.Long', $: good.cid },
pageNo: { $class: 'java.lang.Integer', $: good.pageNo },
pageSize: { $class: 'java.lang.Integer', $: good.pageSize }
}
}
]
};
}
// ========= 业务签名 ========
// ======== 业务接口 =========
/**
* 简单传参示例
* @param {*} goodsId
*/
* getSimpleGoods(goodsId) {
const resultData = yield this.request('getSimpleGoods', goodsId);
return resultData;
}
/**
* 复杂传参示例
* @param {*} cid
* @param {*} pageNo
* @param {*} pageSize
*/
* selectByPage(cid, pageNo, pageSize) {
const resultData = yield this.request('selectByPage', {
cid,
pageNo,
pageSize
});
return resultData;
}
// ======== 业务接口 =========
}
// 注册服务
app.goodsService = new GoodsRpcService(app);
app.goodsService.update();
};
/**
* 服务调用示例
* @param {*} goodsId
*/
* getSimpleGoods(goodsId) {
const resultData = yield this.app.goodsService.getSimpleGoods(goodsId);
return resultData;
}
Please open an issue here.