41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const amqp = require('../');
|
|
|
|
(async () => {
|
|
|
|
const connection = await amqp.connect();
|
|
const channel = await connection.createChannel();
|
|
|
|
process.once('SIGINT', async () => {
|
|
await channel.close();
|
|
await connection.close();
|
|
});
|
|
|
|
const { exchange } = await channel.assertExchange('matching exchange', 'headers');
|
|
const { queue } = await channel.assertQueue();
|
|
|
|
// 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.
|
|
await channel.bindQueue(queue, exchange, '', {
|
|
'x-match': 'any',
|
|
'foo': 'bar',
|
|
'baz': 'boo'
|
|
});
|
|
|
|
await channel.consume(queue, (message) => {
|
|
console.log(message.content.toString());
|
|
}, { noAck: true });
|
|
|
|
channel.publish(exchange, '', Buffer.from('hello'), { headers: { baz: 'boo' }});
|
|
channel.publish(exchange, '', Buffer.from('hello'), { headers: { foo: 'bar' }});
|
|
channel.publish(exchange, '', Buffer.from('lost'), { headers: { meh: 'nah' }});
|
|
|
|
console.log(' [x] To exit press CTRL+C.');
|
|
})();
|