我有一个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。所以这不是队列工作者的问题,而是代理本身没有接收到所有消息。
1条答案
按热度按时间tcomlyy61#
我刚刚尝试推送15k消息,代理存储了14754。所以这不是队列工作者的问题,而是代理本身没有接收到所有消息。
您没有使用发布者确认,因此在通过套接字发送所有消息之前,您的应用程序将退出。
https://www.rabbitmq.com/confirms.html#publisher-confirms
**注意:**Team RabbitMQ监控
rabbitmq-users
邮件列表,仅在StackOverflow上偶尔回答问题。