humpback-redis-event
Distributed node.js event emitter based on redis pub/sub.
Supports channels (sort of namespaces). This code is heavily used 24x7 on a thousand-servers cluster.
While this iteration of redis-event was built for Humpback it is a good candiate for any server clusters who need to speak to eachother.
SYNOPSIS
var RedisEvent = ; var options = prefix: 'sync' redis: port: 1234 host: '10.0.50.20' auth: 'password' db: 3 // if provided select a non-default redis db options: // see https://github.com/mranney/node_redis#rediscreateclient enable_offline_queue: false retry_max_delay: 10000 max_attempts: 10000 no_ready_check: true //Connect to localhost redisvar ev = 'updates' 'stats'; ev;
Connections
You can pass a redis connection to humpback-redis-event, or by default it will try to connect to a redis connection on localhost port 6379.
prefix
controls the key names used in Redis. By default, there is no prefix. Prefix generally shouldn't be changed unless you need to use one Redis instance for multiple apps. It can also be useful for providing an isolated testbed across your main application.
var options = prefix: 'sync' redis: port: 1234 host: '10.0.50.20' auth: 'password' db: 3 // if provided select a non-default redis db options: // see https://github.com/mranney/node_redis#rediscreateclient enable_offline_queue: false retry_max_delay: 10000 max_attempts: 10000 no_ready_check: true
var ev = new RedisEvent( ['updates', 'stats'], options );
You can also specify the connection information as a URL string.
var ev = redis: 'redis://example.com:1234?redis_option=value&redis_option=value';
Below is a sample code to enable redis-sentinel to connect to Redis Sentinel for automatic master/slave failover.
var Sentinel = ;var endpoints = host: '192.168.1.10' port: 6379 host: '192.168.1.11' port: 6379;var opts = options || {}; // Standard node_redis client optionsvar masterName = 'mymaster';var sentinel = Sentinel; var ev = 'updates' 'stats' redis: { return sentinel; } ;
Installation
npm install humpback-redis-event
API
new RedisEvent([channel, channel, channel...], options)
Initialise object.
Arguments
channel
- name(s) of the redis pub/sub channel(s) to subscribe tooptions
- optional object that may have following properties:redis
- redis connection to connect to.connectionFactory
= redis connection factory
redisEvent.subscribe(channelName)
Subscribe to Channel.
Arguments
channelName
- channel name;
redisEvent.unsubscribe(channelName)
Unsubscribe to Channel.
Arguments
channelName
- channel name;
redisEvent.pub(eventName, payload)
Emit network event.
Arguments
eventName
- event name in form ofchannel:name
, eg.server:stats
payload
- optional JS object to add to the event. Must be serializable to JSON
redisEvent.on(eventName, function(payload))
Subscribe to network event. Special case: ready
event (see below).
Arguments
eventName
- event name in form ofchannel:name
, eg.server:stats
payload
- optional JS object that was added to event
redisEvent.on('ready')
This event is emitted when humpback-redis-event has successfully connected to both redis sub and pub channels. You will want to emit events only after this event is fired. If also can be fired multiple times in case there was a reconnect.
redisEvent.quit()
Disconnect from redis. This is actually useful to quit node application.