RabbitMQ没有收到所有消息

b1payxdu  于 2023-05-17  发布在  RabbitMQ
关注(0)|答案(1)|浏览(181)

我有一个NodeJS脚本,它读取目录中的所有文件,并向RabbitMQ队列发送消息来处理它们。
有129 k文件。我所做的基本上是用fs.readdir读取所有文件名,迭代文件名数组并向RabbitMQ发送消息。由于某种原因,队列不存储129 k消息,而只存储3 k消息。
这是我的代码:

files.forEach((fileName) => {
    dispatchMessage(channel, fileName)
    dispatchedMessagesCount++
})

const dispatchMessage = (channel, targetPath) => {
    try {
        channel.sendToQueue(queue, Buffer.from(targetPath), {
            persistent: true,
            expiration: 10800000,
        })

        logEvent(`Published %s`, targetPath)
    } catch (error) {
        logEvent(`Error publishing  %s`, targetPath)
    }
}

我试图通过expiration属性设置一个非常大的TTL-3小时,但没有成功。我在控制台输出上没有看到任何错误。
看起来RabbitMQ对传入消息有某种速率限制策略,但我找不到任何关于它的信息。
有什么想法吗
更新:
我刚刚尝试推送15 k消息,代理存储了14754。所以这不是队列工作者的问题,而是代理本身没有接收到所有消息。

tcomlyy6

tcomlyy61#

我刚刚尝试推送15k消息,代理存储了14754。所以这不是队列工作者的问题,而是代理本身没有接收到所有消息。
您没有使用发布者确认,因此在通过套接字发送所有消息之前,您的应用程序将退出。
https://www.rabbitmq.com/confirms.html#publisher-confirms

**注意:**Team RabbitMQ监控rabbitmq-users邮件列表,仅在StackOverflow上偶尔回答问题。

相关问题