dubbo protocol implement
Switch branches/tags
Nothing to show
Clone or download
beiwei30 Merge pull request #9 from dubbo/change-license
chore: change license to apache v2
Latest commit f31504b Nov 23, 2018

README.md

dubbo-remoting

dubbo remoting

NPM version build status Test coverage David deps Known Vulnerabilities npm download

Introduction

Dubbo Protocol Nodejs Implement

  • Common Exchange Packet
 0      1      2             4             6             8            10            12
 +------+------+------+------+------+------+------+------+------+------+------+------+
 |    MAGIC    | flag |status|                        packet id                      |
 +-------------+-------------+-------------+-------------+-------------+-------------+
 |        body length        |                          body                         |
 +---------------------------+                                                       +
 |                                     ... ...                                       |
 +-----------------------------------------------------------------------------------+
  • Dubbo Request Packet
 0      1      2             4             6             8            10            12
 +------+------+------+------+------+------+------+------+------+------+------+------+
 |    MAGIC    | flag |      |                        packet id                      |
 +-------------+-------------+-----------------+-------------------+-----------------+
 |        body length        |  dubbo version  |   service path    | service version |
 +---------------+-----------+-----------+-----+-------------------+-----------------+
 |  method name  | arguments description |                                           |
 +---------------+-----------------------+                arguments                  +
 |                                        ...  ...                                   |
 +-----------------------------------------------------------------------------------+
 |                                   attachments                                     |
 +-----------------------------------------------------------------------------------+
  • Dubbo Response Packet

packet status ok

 0      1      2             4             6             8            10            12
 +------+------+------+------+------+------+------+------+------+------+------+------+
 |    MAGIC    | flag |status|                        packet id                      |
 +-------------+-------------+---------------------------+---------------------------+
 |        body length        |        result flag        |                           |
 +---------------------------+---------------------------+                           +
 |                             result or exception ...                               |
 +-----------------------------------------------------------------------------------+

packet status not ok

 0      1      2             4             6             8            10            12
 +------+------+------+------+------+------+------+------+------+------+------+------+
 |    MAGIC    | flag |status|                        packet id                      |
 +-------------+-------------+---------------------------+---------------------------+
 |        body length        |                   error message                       |
 +---------------------------+-------------------------------------------------------+

Install

$ npm install dubbo-remoting --save

Usage

You can use this dubbo protocol implementation with the sofa-rpc-node

1. Install & Launch zk

$ brew install zookeeper

$ zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

2. Expose a dubbo service

'use strict';

const { RpcServer } = require('sofa-rpc-node').server;
const { ZookeeperRegistry } = require('sofa-rpc-node').registry;
const protocol = require('dubbo-remoting');

const logger = console;

// 1. create zk registry client
const registry = new ZookeeperRegistry({
  logger,
  address: '127.0.0.1:2181',
});

// 2. create rpc server
const server = new RpcServer({
  logger,
  registry,
  port: 12200,
  protocol,
});

// 3. add service
server.addService({
  interfaceName: 'com.nodejs.test.TestService',
}, {
  async plus(a, b) {
    return a + b;
  },
});

// 4. launch the server
server.start()
  .then(() => {
    server.publish();
  });

3. Call the dubbo service

'use strict';

const { RpcClient } = require('sofa-rpc-node').client;
const { ZookeeperRegistry } = require('sofa-rpc-node').registry;
const protocol = require('dubbo-remoting');
const logger = console;

// 1. create zk registry client
const registry = new ZookeeperRegistry({
  logger,
  address: '127.0.0.1:2181',
});

async function invoke() {
  // 2. create rpc client with dubbo protocol
  const client = new RpcClient({
    logger,
    registry,
    protocol,
  });
  // 3. create rpc service consumer
  const consumer = client.createConsumer({
    interfaceName: 'com.nodejs.test.TestService',
  });
  // 4. wait consumer ready
  await consumer.ready();

  // 5. call the service
  const result = await consumer.invoke('plus', [1, 2], { responseTimeout: 3000 });
  console.log('1 + 2 = ' + result);
}

invoke().catch(console.error);