0.5.9 • Published 7 years ago
zoologist v0.5.9
Zoologist
A Curator-esque ZooKeeper framework for Node.js.
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