egg-dubbo

1.0.5 • Public • Published

egg-dubbo

NPM version build status Test coverage David deps Known Vulnerabilities

Egg连接Dubbo服务插件

Install

$ npm i egg-dubbo --save

Usage

// {app_root}/config/plugin.js
exports.eggDubbo = {
  enable: true,
  package: 'egg-dubbo',
};

Configuration

// {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.

Example

1.存放服务文件于app/service/rpc目录

Service Preview Gif 1

2.每个服务文件格式,以GoodsRpcService.js为例:

'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;
  }

本地Charles调试输出

Invoke Preview Gif 1

Questions & Suggestions

Please open an issue here.

License

MIT

Package Sidebar

Install

npm i egg-dubbo

Weekly Downloads

10

Version

1.0.5

License

MIT

Unpacked Size

493 kB

Total Files

36

Last publish

Collaborators

  • gxcsoccer
  • fengmk2