egg.js 配置连接dubbo服务
egg.js+dubbo2.js 连接dubbo服务
项目中安装dubbo2.js
npm install dubbo2.js --save
项目中安装 js-to-java
npm install js-to-java --save
项目中配置dubbo服务
编写dubbo service 配置 TestService.js
-
创建app/dubbo/TestService.js
TestService.js
'use strict'; const config = { dubboInterface:'com.xxx.xxx.service.TestService',//dubbo service TestService类 //methods 方法,项目中使用到该服务中的接口,需放入methods中 methods:{ //dubbo TestService 中 hello 接口 hello(data){ return [data]; } }, timeout:60000 //timeout } module.exports = { interfaceName:config.dubboInterface, service: dubbo => dubbo.proxyService(config) }
-
创建 app/dubbo/index.js
index.js
'use strict'; const { Dubbo, Setting } = require('dubbo2.js'); const TestService = require('./TestService.js'); /* 配置service Setting.match解析: Setting.match(arg: string | Array<string> | RegExp | TPredictFunction, dubboSetting?: IDubboSetting) arg 可为string ,或 array。 若只有一个dubbo Service 可传入string or array类型,多个dubbo 服务,需传入 array类型。 dubboSetting 配置dubbo 服务 {version , timeout , group} interface IDubboSetting { group?: string; version?: string; timeout?: number; } */ const dubboSetting = Setting.match([TestService.interfaceName],{version:''}) //获取 service 集合 const service = { ITestSetvice:TestService.service } 导出实例化dubbo 函数 exports.dubbo = function(register){ return new Dubbo({ application: { name: 'consumer-test-service' },//消费者应用名称,可根据实际填写, register,//dubbo 注册中心 dubboSetting, //dubbo 配置 dubboInvokeTimeout: 60000, service // 使用到的service 集合 }) }
-
配置dubbo 注册中心
config.default.js
'use strict'; module.exports = appInfo =>{ const config = (exports = {}); .... .... //dubbo注册中心 多个用 , 分割 config.dubboRegister = '127.0.0.1:8899,127.0.0.2:9988', ... }
-
初始化dubbo 服务
app.js
'use strict'; const { dubbo } = require('./dubbo/index') module.exports = app =>{ app.dubbo = dubbo(app.config.dubboRegister); //连接dubbo }
-
调用dubboService 方法
新建app/controller/test.js
'use strict' const Controller = require('egg').Controller; const java = require('js-to-java'); class TestController extends Controller { async test(){ const { ctx, app } = this; //可以参考 npm 仓库 js-to-java, 下行代码将 {num:123} 序列化为 TestService$hello 接口所需要的类型 const data = java('com.xxx.req',{ num:123 }); const resp = await app.dubbo.service.ITestService.hello(data); if(resp.res){ ctx.body = resp.res; } //resp.res 为接口返回结果; resp.err 中返回dubbo service 连接错误信息 } }