Network Powering Makers

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

    Install

    npm i zoologist

    DownloadsWeekly Downloads

    91

    Version

    0.5.9

    License

    ISC

    Last publish

    Collaborators

    • robinsio
    • stevenr