zoologist

0.5.9 • Public • Published

Zoologist

A Curator-esque ZooKeeper framework for Node.js.

NPM

Installation

npm install zoologist --save

Examples

Service Registration

'use strict';
 
var Zoologist               = require('zoologist').Zoologist;
var ServiceInstanceBuilder  = require('zoologist').ServiceInstanceBuilder;
var ServiceDiscoveryBuilder = require('zoologist').ServiceDiscoveryBuilder;
 
// Client
var zoologistClient = Zoologist.newClient('127.0.0.1:2181');
 
// Start the client (connect to ZooKeeper)
zoologistClient.start();
 
// Service Instance
var serviceInstance = ServiceInstanceBuilder
                        .builder()
                        .address('127.0.0.1')
                        .port(process.env.PORT)
                        .name('my/service/name/v1')
                        .build();
 
// Service Discovery
var serviceDiscovery = ServiceDiscoveryBuilder
                         .builder()
                         .client(zoologistClient)
                         .thisInstance(serviceInstance)
                         .basePath('services')
                         .build();
 
// Register a Service
serviceDiscovery.registerService(function onRegister(err, data) {
  console.log({
    id: data.id,
    name: data.name,
    address: data.address,
    port: data.port
  });
});
 

Service Discovery

'use strict';
 
var Zoologist               = require('zoologist').Zoologist;
var ServiceInstanceBuilder  = require('zoologist').ServiceInstanceBuilder;
var ServiceDiscoveryBuilder = require('zoologist').ServiceDiscoveryBuilder;
 
// Client
var zoologistClient = Zoologist.newClient('127.0.0.1:2181');
 
// Start the client (connect to ZooKeeper)
zoologistClient.start();
 
// Service Instance
var serviceInstance = ServiceInstanceBuilder
                        .builder()
                        .address('127.0.0.1')
                        .port(process.env.PORT)
                        .name('my/service/name/v1')
                        .build();
 
// Service Discovery
var serviceDiscovery = ServiceDiscoveryBuilder
                         .builder()
                         .client(zoologistClient)
                         .thisInstance(serviceInstance)
                         .basePath('services')
                         .build();
 
// Service Provider (providerStrategy: 'RoundRobin' or 'Random')
var serviceProvider = serviceDiscovery.serviceProviderBuilder()
                        .serviceName('my/service/name/v1')
                        .providerStrategy('RoundRobin')
                        .build();
 
// Discover available Services and provide an instance
serviceProvider.getInstance(function onInstanceReturn(err, data) {
  console.log({
    id: data.id,
    name: data.name,
    address: data.address,
    port: data.port,
    serviceUrl: serviceUrl
  });
});
 

Leadership Election

'use strict';
 
var async = require('async');
 
var Zoologist = require('..').Zoologist;
 
var LeaderElection = require('..').LeaderElection;
 
var client = Zoologist.newClient('127.0.0.1:2181');
 
/*
 * This represents how many active elections you will need at one time.
 * The default is 10.
 */
client.setMaxListeners(1024);
client.start();
 
var election = new LeaderElection(client, '/my/path', 'my-id');
 
election.start(function(err, res){
  console.log(res);
});
 
election.on('groupLeader', function () {
  console.log('I am the leader, watch me lead!');
});
 
election.on('myLeader', function (myLeader) {
  console.log('My leader is', myLeader);
});
 
election.on('myFollower', function (myFollower) {
  console.log('My follower is', myFollower);
});
 
election.on('topologyChange', function (data) {
  console.log('Topology Change: ' + data);
});
 
election.on('error', function (err) {
  console.log('Error: ' + err);
 
  election.withdraw(function(err){
    console.log("Withdrawn the election!");
 
      election.start(function(err, res){
        console.log(res);
      });
  });
});
 

Package Sidebar

Install

npm i zoologist

Weekly Downloads

33

Version

0.5.9

License

ISC

Last publish

Collaborators

  • robinsio
  • stevenr