Created
September 10, 2013 15:19
-
-
Save jazlalli/6510962 to your computer and use it in GitHub Desktop.
Example of a node-amqp subscriber with dead lettering
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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