dl
Version:
DreamLab Libs
64 lines (46 loc) • 2.31 kB
JavaScript
var core = require('core');
var Event = core.event.Event;
var RbmqQueue = core.client.rabbitmq.RbmqQueue;
var QueueClient = require('./QueueClient').QueueClient;
var QueueIncomingMessage = require('./QueueIncomingMessage').QueueIncomingMessage;
var QueueIncomingMessageProcessorFactory = require('./QueueIncomingMessageProcessor').QueueIncomingMessageProcessorFactory;
var QueueSubscriber = function() {
QueueClient.apply(this, arguments);
this._exclusiveRoutingKey = null;
};
QueueSubscriber.prototype = Object.create(QueueClient.prototype);
QueueSubscriber.prototype.setExclusiveRoutingKey = function (value) {
this._exclusiveRoutingKey = value;
};
QueueSubscriber.prototype._onConnected = function() {
console.log('QueueSubscriber/_onConnected');
var queueConfig = this._credentials.getQueueConfig();
if (queueConfig.exclusive && this._exclusiveRoutingKey !== null) {
var bindings = queueConfig.bindings;
queueConfig.bindings = [];
for (var i = 0, l = bindings.length; i < l; i++) {
queueConfig.bindings.push(bindings[i]);
queueConfig.bindings.push({
exchange: bindings[i].exchange,
routingKey: this._exclusiveRoutingKey
});
}
}
this._rbmqChannel = new RbmqQueue(this._rbmqConnection, queueConfig);
this._rbmqChannel.addEventListener(RbmqQueue.Event.MESSAGE_RECEIVED, this._onMessageReceived, this);
this._messageProcessor = QueueIncomingMessageProcessorFactory.get(queueConfig, this._rbmqConnection, this._logger);
QueueClient.prototype._onConnected.call(this);
};
QueueSubscriber.prototype._onMessageReceived = function(ev) {
var queueMsg = new QueueIncomingMessage(ev.data, this._logger, this._messageProcessor);
var that = this;
console.log('QueueSubscriber/_onMessageReceived', queueMsg.getMessageId());
process.nextTick(function() {
that.dispatchEvent(new Event(QueueSubscriber.Event.MESSAGE_RECEIVED, queueMsg));
});
};
QueueSubscriber.Event = {};
QueueSubscriber.Event.CONNECTED = QueueClient.Event.CONNECTED;
QueueSubscriber.Event.DISCONNECTED = QueueClient.Event.DISCONNECTED;
QueueSubscriber.Event.MESSAGE_RECEIVED = 'QueueSubscriber.Event.MESSAGE_RECEIVED';
exports.QueueSubscriber = QueueSubscriber;