zoodubbo
Version:
A Javascript module for Node.js to connect Dubbo service by node-zookeeper-client.
215 lines (152 loc) • 6.19 kB
Markdown
# zoodubbo
[](http://travis-ci.org/Corey600/zoodubbo)
[](https://coveralls.io/github/Corey600/zoodubbo)
[](https://www.npmjs.org/package/zoodubbo)
[](https://www.npmjs.org/package/zoodubbo)
[](https://www.npmjs.org/package/zoodubbo)
A Javascript module for
[Node.js](http://nodejs.org)
to connect Dubbo service by
[node-zookeeper-client](https://github.com/alexguan/node-zookeeper-client).
## Features
- Invoke Dubbo service as a Customer.
- Use Zookeeper as the Dubbo Registration Center.
- Only supports the use of the default hessian2 protocol for serialization and deserialization.
- It is not very friendly to support the return value containing an enum type.
- Use [Random LoadBalance](https://dubbo.gitbooks.io/dubbo-user-book/demos/loadbalance.html) to choose Provider.
- Use [generic-pool](https://github.com/coopernurse/node-pool) to manage net.Socket.
## Installation
You can install it using npm:
```bash
$ npm install zoodubbo
```
## Example
```javascript
var ZD = require('zoodubbo');
var zd = new ZD({
// config the addresses of zookeeper
conn: 'localhost:2181'
});
// connect to zookeeper
zd.connect();
// get a invoker with a service path
var invoker = zd.getInvoker('com.demo.Service');
// excute a method with parameters
var method = 'getUserByID';
var arg1={$class:'int',$:123};
invoker.excute(method, [arg1], function (err, data) {
if (err) {
console.log(err);
return;
}
console.log(data)
});
```
## Documentation
### new ZD(conf)
*Arguments*
* conf {*String|Object*} - A string of host:port pairs like `conn`. Or an object to set the instance options. Currently available options are:
* `dubbo` {*String*} - Dubbo version information.
*The following content could reference: [https://github.com/alexguan/node-zookeeper-client#client-createclientconnectionstring-options](https://github.com/alexguan/node-zookeeper-client#client-createclientconnectionstring-options)*
* `conn` {*String*} - Just like connectionString of [node-zookeeper-client](https://github.com/alexguan/node-zookeeper-client). Comma separated host:port pairs, each represents a ZooKeeper server.
* `sessionTimeout` {*Number*} - Session timeout in milliseconds, defaults to 30 seconds.
* `spinDelay` {*Number*} - The delay (in milliseconds) between each connection attempts.
* `retries` {*Number*} - The number of retry attempts for connection loss exception.
*Example*
```javascript
// use a string of host:port pairs
var zd = new ZD('localhost:2181,localhost:2182');
// use an object to set the instance options
var zd = new ZD({
conn: 'localhost:2181,localhost:2182',
dubbo: '2.5.3'
});
```
----
#### client
The client instance created by [node-zookeeper-client](https://github.com/alexguan/node-zookeeper-client). To listen event such as follows:
```javascript
zd.client.on('connected', function connect() {
console.log('zookeeper client connected!');
});
```
The list of events could reference: [https://github.com/alexguan/node-zookeeper-client#state](https://github.com/alexguan/node-zookeeper-client#state)
----
#### void connect()
Connect to the Dubbo Registration Center by [node-zookeeper-client](https://github.com/alexguan/node-zookeeper-client). Equivalent to the following code:
```javascript
zd.connect();
// just like
zd.client.connect();
```
----
#### void close()
Close the connection of [node-zookeeper-client](https://github.com/alexguan/node-zookeeper-client). Equivalent to the following code:
```javascript
zd.close();
// just like
zd.client.close();
```
----
#### Invoker getInvoker(path[, opt])
*Arguments*
* path {*String*} - Path of service.
* opt {*Object*} - An object to set the Invoker options. Currently available options are:
* `version` {*String*} - Service version information.
* `timeout` {*Number*} - The timeout (in milliseconds) to excute.
*The following content could reference: [generic-pool](https://github.com/coopernurse/node-pool)*
* `poolMax` {*Number*} - Maximum number of net.Socket to create from pool at any given time. Defaults to 1 .
* `poolMin` {*Number*} - Minimum number of net.Socket to keep in pool at any given time. If this is set >= poolMax, the pool will silently set the min to equal max. Defaults to 0 .
*Example*
```javascript
var invoker = zd.getInvoker('com.demo.Service', {
version: '0.0.0'
});
```
----
### new Invoker(zk[, opt])
Also you can create Invoker instance by URIs of providers directly.
*Arguments*
* zk {*Client|String|Array*} - The ZD instance or the URIs of providers.
* opt {*Object*} - An object to set the instance options. Currently available options are:
* `path` {*String*} - Path of service.
* `dubbo` {*String*} - Dubbo version information.
*The other content is same as the `opt` in [getInvoker(path[, opt])](#invoker-getinvokerpath-opt)*
*Example*
```javascript
var invoker = new ZD.Invoker(
'dubbo://127.0.0.1:20880/com.demo.DemoService?interface=com.demo.DemoService&methods=sayHello',
{ version: '0.0.0' }
);
```
----
#### void excute(method, args[, cb])
*Arguments*
* method {*String*} - Method to excute.
* args {*Array*} - Argument list.
* cb(err, data) {*Function*} - The data is the returned value. When the cb is undefined, the function return a Promise instance.
*Example*
```javascript
var method = 'getUserByID';
var arg1={$class:'int',$:123};
// use callback
invoker.excute(method, [arg1], function (err, data) {
if (err) {
console.log(err);
return;
}
console.log(data)
});
// or return a Promise instance
invoker.excute(method, [arg1])
.then(function(data){
console.log(data);
}).catch(function(err){
console.log(err);
});
```
----
## License
Licensed under the
[MIT](http://opensource.org/licenses/MIT)
license.