Friday 21 April 2017

Node JS : ZooKeeperError: Connection Not Established

I am new to node-js cloud platform. My requirement is to register different services having different port register with centralised discovery-service, so that if I want to communicate with another service I can get information like port no, path just by sending service name to discovery client. Currently I am using 'node-service-discovery' module for my requirement. I have no Idea how exactly to use this module.

I have a service running on port 9001 trying to register using 'Service Register' to 'Service Discovery'.

Following is Error I am facing.

        throw new ZooKeeperError('Connection Not Established');
        ^

ZooKeeperError: Connection Not Established
    at Ranger.getZkClient (C:\Program Files\nodejs\node_modules\npm\node_modules\node-service-discovery\lib\Ranger.js:96:15)
    at createServiceBasePath (C:\Program Files\nodejs\node_modules\npm\node_modules\node-service-discovery\lib\ServiceDiscovery.js:58:14)
    at nextTask (C:\Program Files\nodejs\node_modules\npm\node_modules\async\dist\async.js:5021:18)
    at Object.waterfall (C:\Program Files\nodejs\node_modules\npm\node_modules\async\dist\async.js:5024:9)
    at ServiceDiscovery.registerService (C:\Program Files\nodejs\node_modules\npm\node_modules\node-service-discovery\lib\ServiceDiscovery.js:48:11)
    at Object.<anonymous> (C:\NODE POC\Node-Service\ServiceRegistration.js:47:18)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)

Following is My Code.

ServiceDiscovery.js

'use strict';

var Ranger                  = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery').Ranger;
var ServiceInstanceBuilder  = require("C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery").ServiceInstanceBuilder;
var ServiceDiscoveryBuilder = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery').ServiceDiscoveryBuilder;
var ServiceInstance = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery/lib/ServiceInstance');
//Create a Ranger Client
var rangerClient = Ranger.newClient(process.env.ZK_CONNECTION_STRING || '127.0.0.1:2181');
/** start emits 'connected' event. You can initialize following things after the event
 *  Eg: rangerClient.once('connected') { //initialize following code }
 */
rangerClient.start();
var healthCheck = function () {
        var isHealthy = true;
        return {
            isHealthy: function () {
                return isHealthy;
            },
            setStatus: function (status) {
                isHealthy = status;
            }
        }
};
var instanceHealthCheck = healthCheck();
/**
 * Create the Service Discovery Instance
 *
 * process.env.refreshInterval is the interval to check for the updation of nodes in ZK.
 */
var serviceInstance = new ServiceInstance("my-service", "localhost", 9001, "development", [instanceHealthCheck]);
console.log(JSON.stringify(serviceInstance.getData()));
var serviceDiscovery = ServiceDiscoveryBuilder
        .builder()
        .client(rangerClient)
        .serviceInstance(serviceInstance)
        .basePath('services')
        .refreshInterval(10000)
        .build();
// Create the instance provider (selectionStrategy: 'RoundRobin' or 'Random')
var instanceProvider = serviceDiscovery
        .instanceProviderBuilder()
        .serviceName('dependent-service')
        .selectionStrategy('RoundRobin')
        .build()
//init the provider, it adds watcher, adds periodic polling and gets instance data for first time
instanceProvider.init(function(error) {
    //check for error her
    console.log('Error in ServiceDiscovery.');
    console.log(error);
});
// Get an instance. The returned value will have 'data' model specified above
console.log('getInstance: '+instanceProvider.getInstance());
module.exports.serviceDiscovery = serviceDiscovery;

ServiceRegister.js:

'use strict';
var Ranger                  = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery').Ranger;
var ServiceInstanceBuilder  = require("C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery").ServiceInstanceBuilder;
var ServiceDiscoveryBuilder = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery').ServiceDiscoveryBuilder;
var ServiceDiscovery = require('C:/Program Files/nodejs/node_modules/npm/node_modules/node-service-discovery/lib/ServiceDiscovery');


//Create a Ranger Client
var rangerClient = Ranger.newClient(process.env.ZK_CONNECTION_STRING || 'localhost:9001');

/** start emits 'connected' event. You can initialize following things after the event
 *  Eg: rangerClient.once('connected') { //initialize following code }
 */
rangerClient.start();

var healthCheck = function () {
        var isHealthy = true;
        return {
            isHealthy: function () {
                return isHealthy;
            },
            setStatus: function (status) {
                isHealthy = status;
            }
        }
};

/**
 * Register a Service
 *
 * process.env.environment is whatever is the environment you are using
 * Additionally, you can also bind the health-checks with the service instance (healthcheck is optional)
 */

var serviceInstance = ServiceInstanceBuilder
        .builder()
        .host("localhost")
        .port(9100) //integer
        .environment(process.env.environment || 'development')
        .healthChecks([healthCheck])
        .name('my-service')
        .build();

var serviceDiscovery = new ServiceDiscovery(rangerClient, 'services', serviceInstance, 5000);

serviceDiscovery.registerService(function(error) {
    //check for error
    console.log('Error in ServiceRegistration.');
    console.log(error);
});

module.exports.serviceInstance = serviceInstance;

Please help me regarding how to use this module for service registration. or suggest any alternate module for my scenario with good support available in internet.

Thanks.



via user2324149

No comments:

Post a Comment