node-thrift-service
node >= 4.0.0
Unlike other language, javascript
can use .apply
to call a function
, so calling the remote nodejs service only need to transport alias(of service), action(function of service, MUST BE A PROMISE/SYNC), params
.
By using Thrift
, it support two way to use this module:
- When calling
nodejs service
, use the inner msg.thrift
- Using
use-defined.thrift
Features:
- use redis/zookeeper to publish thrift service
- caller search the services, using polling to manage thrift clients
- client subscribe for new services
Warning: Thrift Server will listening on a port, so you need to config your Firewalls
Install
npm install node-thrift-service
USAGE
cd test
and run node server
, node client
.
ThriftServer
const ThriftServer = require('node-thrift-service').ThriftServer;
let server = new ThriftServer({
adapter: {
name : 'zookeeper',
options: {
connect : '127.0.0.1:2181',
timeout : 200000,
debug_level : ZooKeeper.ZOO_LOG_LEVEL_ERROR,
host_order_deterministic: false,
data_as_buffer : false
}
}
});
server.on('debug', console.log);
server.on('info', console.log);
server.on('error', console.error);
server.on('ready', (info) => {
console.log(info);
server.add({
alias : 'lodash',
service: _,
actions: ['isString', 'no_such_action']
});
});
ThriftClient
const ThriftServer = require('node-thrift-service').ThriftClient;
let client = new ThriftClient({
adapter: {
name : 'zookeeper',
options: {
connect : '127.0.0.1:2181',
timeout : 200000,
debug_level : ZooKeeper.ZOO_LOG_LEVEL_ERROR,
host_order_deterministic: false,
data_as_buffer : false
}
}
});
client.on('debug', console.log);
client.on('info', console.log);
client.on('error', console.error);
client.on('ready', (info) => {
console.log(info);
client.call('lodash', 'isString', ['a']).then(console.log);
client.call('lodash', 'no_such_action', []).catch(console.error);
});
OPTIONS && API
ThriftServer(options)
inner gen-nodejs
[options.adapter]
: optional {Object}, include:
[options.services]
: optional {Object|Array}, each service include:
[alias]
: {Function|String} unique name of each service, or use service.name
or service.identity
service
: {Object} origin service object[actions]
: {Array|String} permissions, or allow all service actions, ONLY support PROMISE/SYNC
[options.thrift]
: optional {Object}, include:
[port]
: {Number} if null, thrift server bind to an unused port (default to find a unused port increasing from 7007 or from this setting, Thrift Server will listening on this port, so you need to config your Firewalls)[host]
: {String} if null, use ipv4 from eth0(linux) en0(osx)
use-defined gen-nodejs
[options.adapter]
: optional {Object}, include:
- ``[options.thrift]` : optional {Object}, include:
[port]
: {Number} if null, thrift server bind to an unused port (default to find a unused port increasing from 7007 or from this setting, Thrift Server will listening on this port, so you need to config your Firewalls)[host]
: {String} if null, use ipv4 from eth0(linux) en0(osx)alias
: {String} alias of gen-nodejs proceesor // for search thrift serverprocessor
: gen-nodejs proceesor // see server.js#L102handler
: gen-nodejs handleroptions
: {Object} gen-nodejs options
API
.add(services)
: invalid with 'use-defined gen-nodejs', return {Promise|bluebird}
[alias]
: {Function|String} unique name of each service, or use service.name
or service.identity
service
: {Object} origin service object[actions]
: {Array|String} permissions, or allow all service actions, ONLY support PROMISE/SYNC
.on(EVENT)
:
ready
: server initial .on('ready', (info) => {...})
debug
: debug log .on('ready', (info) => {...})
info
: info log, .on('info', (info) => {...})
error
: error log, .on('info', (err) => {…})
.server()
get thrift.createServer.host()
get host.port()
get port
ThriftClient(options) :
[options.adapter]
: optional {Object}, include:
[options.thrifts]
: optional {Object|Array}, if you use user-defined.thrift, you should give this params, each thrift include:
alias
{String} // for search thrift serverprocessor
{Object} // gen-nodejs thrift processor
.call(alias, action, params, [callback])
: use inner msg.thrift
alias
{String} service alias nameaction
: {String} name of actionparams
: {Array} params of alias.action
- return
result
with {Promise|bluebird} or callback(err, result)
.call(alias, [callback])
: for user-defined.thrift return thrift.createClient
alias
: {String} service alias name- return
client
with {Promise|bluebird} or callback(err, client)
.on(EVENT)
:
ready
: server initial .on('ready', (info) => {...})
debug
: debug log .on('ready', (info) => {...})
info
: info log, .on('info', (info) => {...})
error
: error log, .on('info', (err) => {…})
TEST
npm test
or make test
or make test-cover
LICENSE
MIT