first commit
This commit is contained in:
4
batch/pubsub/channel.js
Normal file
4
batch/pubsub/channel.js
Normal file
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
DB: 0,
|
||||
NAME: 'batch:users'
|
||||
};
|
||||
31
batch/pubsub/job-publisher.js
Normal file
31
batch/pubsub/job-publisher.js
Normal file
@@ -0,0 +1,31 @@
|
||||
'use strict';
|
||||
|
||||
var Channel = require('./channel');
|
||||
var debug = require('./../util/debug')('pubsub:publisher');
|
||||
var error = require('./../util/debug')('pubsub:publisher:error');
|
||||
|
||||
function JobPublisher(pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
|
||||
JobPublisher.prototype.publish = function (user) {
|
||||
var self = this;
|
||||
|
||||
this.pool.acquire(Channel.DB, function (err, client) {
|
||||
if (err) {
|
||||
return error('Error adquiring redis client: ' + err.message);
|
||||
}
|
||||
|
||||
client.publish(Channel.NAME, user, function (err) {
|
||||
self.pool.release(Channel.DB, client);
|
||||
|
||||
if (err) {
|
||||
return error('Error publishing to ' + Channel.NAME + ':' + user + ', ' + err.message);
|
||||
}
|
||||
|
||||
debug('publish to ' + Channel.NAME + ':' + user);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = JobPublisher;
|
||||
54
batch/pubsub/job-subscriber.js
Normal file
54
batch/pubsub/job-subscriber.js
Normal file
@@ -0,0 +1,54 @@
|
||||
'use strict';
|
||||
|
||||
var Channel = require('./channel');
|
||||
var debug = require('./../util/debug')('pubsub:subscriber');
|
||||
var error = require('./../util/debug')('pubsub:subscriber:error');
|
||||
|
||||
function JobSubscriber(pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
|
||||
module.exports = JobSubscriber;
|
||||
|
||||
JobSubscriber.prototype.subscribe = function (onJobHandler, callback) {
|
||||
var self = this;
|
||||
|
||||
self.pool.acquire(Channel.DB, function(err, client) {
|
||||
if (err) {
|
||||
if (callback) {
|
||||
callback(err);
|
||||
}
|
||||
return error('Error adquiring redis client: ' + err.message);
|
||||
}
|
||||
|
||||
self.client = client;
|
||||
client.removeAllListeners('message');
|
||||
client.unsubscribe(Channel.NAME);
|
||||
client.subscribe(Channel.NAME);
|
||||
|
||||
client.on('message', function (channel, user) {
|
||||
debug('message received in channel=%s from user=%s', channel, user);
|
||||
onJobHandler(user);
|
||||
});
|
||||
|
||||
client.on('error', function () {
|
||||
self.unsubscribe();
|
||||
self.pool.release(Channel.DB, client);
|
||||
self.subscribe(onJobHandler);
|
||||
});
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
JobSubscriber.prototype.unsubscribe = function (callback) {
|
||||
if (this.client && this.client.connected) {
|
||||
this.client.unsubscribe(Channel.NAME, callback);
|
||||
} else {
|
||||
if (callback) {
|
||||
return callback(null);
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user