Skip to content

Instantly share code, notes, and snippets.

@jazlalli
Created September 10, 2013 15:19
Show Gist options
  • Save jazlalli/6510962 to your computer and use it in GitHub Desktop.
Save jazlalli/6510962 to your computer and use it in GitHub Desktop.
Example of a node-amqp subscriber with dead lettering
var amqpconnection = amqp.createConnection({url: config.CLOUD_AMQP}, connOptions);
amqpconnection.on('ready', function() {
// dead letter exchange for rejected messages
amqpconnection.exchange(
deadLetterExchange,
options = {durable: true, autoDelete: false, type: 'topic'},
function (ex) {
// queue that receives all dead-lettered messages
amqpconnection.queue(
deadLetterQueue,
options = {durable: true, autoDelete: false, closeChannelOnUnsubscribe: true},
function (q) {
logger.info('Created queue: ' + q.name);
q.bind(ex, '#');
}
);
}
);
// primary exchange
amqpconnection.exchange(
primaryExchange,
options = {durable: true, autoDelete: false, passive: true, type: 'fanout'},
function (ex) {
// define queue and bind to the exchange for all relevant messages
amqpconnection.queue(
primaryQueue,
options = {
durable: true,
autoDelete: false,
closeChannelOnUnsubscribe: true,
arguments: {
'x-dead-letter-exchange': deadLetterExchange // specify dead letter exchange
}
},
function (q) {
q.bind(ex, '#');
// define message handler
q.subscribe(options = {ack: true}, function (payload, headers, deliveryinfo, message) {
router.route(payload, deliveryinfo, function (success) {
if (success) {
message.acknowledge();
logger.info('Message acknowledged: success');
} else {
message.reject(false);
logger.error('Message rejected: routed to dead letter exchange');
}
});
});
}
);
}
);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment