1.1.0 • Published 10 years ago
node-thrift-service v1.1.0
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 innermsg.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-serviceUSAGE
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']
});
});
// ThriftServer host: xx.xx.xx.xx , port: 7007ThriftClient
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);
// true
client.call('lodash', 'no_such_action', []).catch(console.error);
// error
});OPTIONS && API
ThriftServer(options)
inner gen-nodejs
[options.adapter]: optional {Object}, include:name='zookeeper': {String} 'redis' or 'zookeeper'options={} : redis: node_redis , zookeeper: node-zookeeper
[options.services]: optional {Object|Array}, each service include:[alias]: {Function|String} unique name of each service, or useservice.nameorservice.identityservice: {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:name='zookeeper': {String} 'redis' or 'zookeeper'options={} : {Object} redis: node_redis , zookeeper: node-zookeeper
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 useservice.nameorservice.identityservice: {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:name='zookeeper': {String} 'redis' or 'zookeeper'options={}: {Object} redis: node_redis , zookeeper: node-zookeeper
[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 innermsg.thriftalias{String} service alias nameaction: {String} name of actionparams: {Array} params ofalias.action- return
resultwith {Promise|bluebird} orcallback(err, result)
.call(alias, [callback]): for user-defined.thrift returnthrift.createClientalias: {String} service alias name- return
clientwith {Promise|bluebird} orcallback(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