https://github.com/node-modules/js-remoting-for-apache-dubbo
dubbo protocol implement
https://github.com/node-modules/js-remoting-for-apache-dubbo
Last synced: 12 days ago
JSON representation
dubbo protocol implement
- Host: GitHub
- URL: https://github.com/node-modules/js-remoting-for-apache-dubbo
- Owner: node-modules
- License: apache-2.0
- Created: 2016-12-22T06:06:31.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-04-28T07:11:18.000Z (about 6 years ago)
- Last Synced: 2025-06-01T13:44:00.825Z (24 days ago)
- Language: JavaScript
- Size: 85.9 KB
- Stars: 22
- Watchers: 25
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
README
# js-remoting-for-apache-dubbo
dubbo remoting[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url][npm-image]: https://img.shields.io/npm/v/js-remoting-for-apache-dubbo.svg?style=flat-square
[npm-url]: https://npmjs.org/package/js-remoting-for-apache-dubbo
[travis-image]: https://img.shields.io/travis/dubbo/js-remoting-for-apache-dubbo.svg?style=flat-square
[travis-url]: https://travis-ci.org/dubbo/js-remoting-for-apache-dubbo
[codecov-image]: https://codecov.io/gh/dubbo/js-remoting-for-apache-dubbo/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/dubbo/js-remoting-for-apache-dubbo
[david-image]: https://img.shields.io/david/dubbo/js-remoting-for-apache-dubbo.svg?style=flat-square
[david-url]: https://david-dm.org/dubbo/js-remoting-for-apache-dubbo
[snyk-image]: https://snyk.io/test/npm/js-remoting-for-apache-dubbo/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/js-remoting-for-apache-dubbo
[download-image]: https://img.shields.io/npm/dm/js-remoting-for-apache-dubbo.svg?style=flat-square
[download-url]: https://npmjs.org/package/js-remoting-for-apache-dubbo## Introduction
[Dubbo](http://dubbo.apache.org/en-us/) 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
```bash
$ npm install dubbo-remoting --save
```## Usage
You can use this dubbo protocol implementation with the [sofa-rpc-node](https://github.com/alipay/sofa-rpc-node)
### 1. Install & Launch zk
```bash
$ 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
```js
'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
```js
'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);
```