rabbitmq 即使队列不存在,amqplib的sendToQueue()也不会抛出任何错误

pwuypxnk  于 2023-02-16  发布在  RabbitMQ
关注(0)|答案(1)|浏览(315)

我用amqplib创建了一个名为'test_queue'的队列
然后我从rabbitmq的管理页面删除了'test_queue'(http://localhost:15672/#/queues)
但是当我执行下面的代码时,它显示"sent message successfully!"
即使名为'test_queue'的队列不存在,也不会出现错误
当队列不存在时,如何得到一个错误?
谢谢你的帮助!

const amqp = require('amqplib');

const sendMsg=async ()=>{

    const connection = await amqp.connect('amqp://localhost');
    const ch = await connection.createConfirmChannel()  

    const msg= 'hello world'
    const QUEUE_NAME = 'test_queue'

    ch.sendToQueue(QUEUE_NAME, Buffer.from(msg),{},function(err, ok) {
        if (err !== null) {
            console.log(err);
        } else {
            console.log('sent message successfully!');
        }
    })

    // await ch.close();
    // await connection.close();
}

sendMsg();
wmtdaxz3

wmtdaxz31#

如果向sendToQueue添加强制标志,则任何无法路由到队列的消息都将被发送回发布者。因此,在示例中,您需要:

ch.sendToQueue(QUEUE_NAME, Buffer.from(msg),{mandatory: true},function(err, ok)

然后,您可以使用相同的通道对象处理返回:

ch.on('return', (message) => {
    console.log(`Unable to route message to ${QUEUE_NAME}`)
}

相关问题