Simple producer, nothing wrong here...
var amqp = require('amqp');
var connection = amqp.createConnection({
port: 5672, host: 'localhost'
});
connection.on('ready', function () {
var exchange = connection.exchange('demo.direct', {
type: 'direct',
durable: true
});
exchange.on('open', function () {
exchange.publish('request.key', {
hello: 'world'
});
});
});However, our consumer attempts to use a function that is not defined, onmessage(). I was thinking this would throw, however node-amqp actually catches it internally and emits an error event on the connection. The gotcha is that node-amqp already has an internal method listening for error events, so we do not get our error bubbled out unless we listen for it on the connection, which you might confuse with an actually network error with rabbit and just exit(1) your process.
I kinda feel like this should throw. Meh?
var amqp = require('amqp');
var connection = amqp.createConnection({
port: 5672,
host: 'localhost'
});
connection.on('ready', function () {
var exchange = connection.exchange('demo.direct', {
type: 'direct',
durable: true,
autoDelete: false
});
exchange.on('open', function () {
var queue = connection.queue('persistor', {
durable: true,
autoDelete: false
});
queue.on('queueDeclareOk', function () {
queue.bind('demo.direct', 'request.key');
});
queue.on('queueBindOk', function () {
var options = { ack: true, prefetchCount: 0 };
queue.subscribe(options, function (msg, headers, info) {
// call function that is not defined
onmessage(msg, headers, info);
queue.shift();
});
});
});
// skip for demo purposes
// connection.on('error', console.error);
});