0.5.9 • Published 7 years ago

zoologist v0.5.9

Weekly downloads
565
License
ISC
Repository
github
Last release
7 years ago

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);
      });
  });
});
0.5.9

7 years ago

0.5.8

7 years ago

0.5.7

7 years ago

0.5.6

7 years ago

0.5.5

7 years ago

0.5.4

8 years ago

0.5.3

8 years ago

0.5.2

8 years ago

0.5.1

8 years ago

0.5.0

8 years ago

0.4.14

8 years ago

0.4.13

8 years ago

0.4.11

8 years ago

0.4.10

8 years ago

0.4.9

8 years ago

0.4.8

8 years ago

0.4.7

9 years ago

0.4.6

9 years ago

0.4.5

9 years ago

0.4.4

9 years ago

0.4.3

9 years ago

0.4.2

9 years ago

0.4.1

9 years ago

0.4.0

9 years ago

0.3.3

9 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.3.0

9 years ago

0.2.1

9 years ago

0.1.3

9 years ago

0.1.2

9 years ago

0.1.1

9 years ago

0.1.0

9 years ago