0.5.9 • Published 8 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
8 years ago
0.5.8
9 years ago
0.5.7
9 years ago
0.5.6
9 years ago
0.5.5
9 years ago
0.5.4
9 years ago
0.5.3
9 years ago
0.5.2
9 years ago
0.5.1
9 years ago
0.5.0
9 years ago
0.4.14
9 years ago
0.4.13
9 years ago
0.4.11
10 years ago
0.4.10
10 years ago
0.4.9
10 years ago
0.4.8
10 years ago
0.4.7
10 years ago
0.4.6
10 years ago
0.4.5
10 years ago
0.4.4
10 years ago
0.4.3
10 years ago
0.4.2
10 years ago
0.4.1
10 years ago
0.4.0
10 years ago
0.3.3
10 years ago
0.3.2
10 years ago
0.3.1
10 years ago
0.3.0
10 years ago
0.2.1
10 years ago
0.1.3
10 years ago
0.1.2
10 years ago
0.1.1
10 years ago
0.1.0
10 years ago