blob: e4f7bcc05ff525802c204ae1868c0e4a6650a0b3 [file] [log] [blame]
#!/usr/bin/env node
// Example of using a headers exchange
var amqp = require('../')
amqp.connect().then(function(conn) {
return conn.createChannel().then(withChannel);
}, console.error);
function withChannel(ch) {
// NB the type of the exchange is 'headers'
ch.assertExchange('matching exchange', 'headers').then(function(ex) {
ch.assertQueue().then(function(q) {
bindAndConsume(ch, ex, q).then(function() {
send(ch, ex);
});
});
});
}
function bindAndConsume(ch, ex, q) {
// When using a headers exchange, the headers to be matched go in
// the binding arguments. The routing key is ignore, so best left
// empty.
// 'x-match' is 'all' or 'any', meaning "all fields must match" or
// "at least one field must match", respectively. The values to be
// matched go in subsequent fields.
ch.bindQueue(q.queue, ex.exchange, '', {'x-match': 'any',
'foo': 'bar',
'baz': 'boo'});
return ch.consume(q.queue, function(msg) {
console.log(msg.content.toString());
}, {noAck: true});
}
function send(ch, ex) {
// The headers for a message are given as an option to `publish`:
ch.publish(ex.exchange, '', Buffer.from('hello'), {headers: {baz: 'boo'}});
ch.publish(ex.exchange, '', Buffer.from('world'), {headers: {foo: 'bar'}});
}