我有一个节点服务器,它基本上将消息发布到rabbitmq 队列和另一个基本上使用它的节点js 服务器。我想要的是让消费者服务器在从节点服务器发布新消息后立即侦听和处理来自队列的消息。我正在将 ampqlib 用于 node js 的 rabbitmq 包
答案 0 :(得分:1)
ampqlib
's documentation 解释了如何为rabbitmq 队列创建消费者。
这样的事情可能会奏效。 (未调试)。
const amqplib = require('amqplib')
const queueName = 'tasks'
const mqUrl = 'amqp://localhost'
...
async function consume(mqUrl, queueName, dispatchFunction) {
const conn = await connect(mqUrl)
const channel = await conn.createChannel()
const ok = await channel.assertQueue(queueName)
while (true) {
try {
const message = await channel.consume(queueName)
if (message !== null) {
channel.ack(message)
dispatchFunction(null, message)
}
} catch (err) {
dispatchFunction(err, null)
}
}
}
consume(mqUrl, queueName,
function (err, message) {
if (err) return console.log(err)
/* do something useful with the message */
} )
.then()
.catch(function (err) {
console.error('cannot access queue', err, mqUrl, queueName)
} )