Consul leader election and retirement.
https://www.consul.io/docs/guides/leader-election.html
npm install --save consul-leader
const Leader = require('consul-leader');
let consulLeader = new Leader('locking-key');
consulLeader.on('elected', () => {
// start service
});
consulLeader.on('retired', () => {
// stop service
});
No configuration is required, but it's recommended to provide at least a custom key name.
let consulLeader = new Leader('locking-key');
It's possible to configure every aspect (consul, session, key) by providing a configuration object instead of a plain string. Most aspects match the configuration options of the consul package.
let consulLeader = new Leader({
consul: {
host: '127.0.0.1',
port: 8500
},
session: {
ttl: 10,
lockdelay: 15
},
key: {
key: 'locking-key',
value: 'leader'
}
});
The consul
configuration matches the consul constructor options.
Note: the promisify
option is required and will be automatically enabled in this package.
The session
configuration matches the consul session create options.
But the ttl
and lockdelay
options have to be integers in seconds.
The key
configuration matches the consul kv set options.
The acquire
and release
options are automatically added, overwriting them will lead to unexpected behaviour.
The Leader
class will automatically try to acquire the leader lock and emits two different events:
elected
: Will be fired when the current instance has acquired the leader lock successfullyretired
: Will be fired when the current instance has lost the leader lock
consulLeader.on('elected', () => {
// start service
});
consulLeader.on('retired', () => {
// stop service
});
If the current instance wants to stop, it can release the lock safely and give others the chance to take over.
consulLeader.resign();