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 连接错误信息
        }
    }
    
    
    
posted @ 2020-11-11 15:46  zcookies  阅读(473)  评论(0编辑  收藏  举报