A Javascript module for Node.js to connect Dubbo service by node-zookeeper-client.
- 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 to choose Provider.
- Use generic-pool to manage net.Socket.
You can install it using npm:
$ npm install zoodubbo
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)
});
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
conn
{String} - Just like connectionString of 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
// 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'
});
The client instance created by node-zookeeper-client. To listen event such as follows:
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
Connect to the Dubbo Registration Center by node-zookeeper-client. Equivalent to the following code:
zd.connect();
// just like
zd.client.connect();
Close the connection of node-zookeeper-client. Equivalent to the following code:
zd.close();
// just like
zd.client.close();
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
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
var invoker = zd.getInvoker('com.demo.Service', {
version: '0.0.0'
});
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])
Example
var invoker = new ZD.Invoker(
'dubbo://127.0.0.1:20880/com.demo.DemoService?interface=com.demo.DemoService&methods=sayHello',
{ version: '0.0.0' }
);
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
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);
});
Licensed under the MIT license.