如何使用 AMQP/Node 处理每秒 >100 条消息

问题描述 投票:0回答:1

我们目前正在设计一个微服务(Node v8.3.0)原型,该服务每秒必须消耗 RabbitMQ(RabbitMQ 3.6.12、Erlang 19.2.1)约 60-150 条消息。有时它就像一个魅力,队列中没有剩余的消息。但大多数情况下,消息会卡住,每秒仅处理 5-20 条消息,并且队列中会累积多达 3M 条消息。

现在我们真的很好奇如何用单个消费者处理所有这些消息。因为已经有一些 Java 消费者在没有任何延迟的情况下处理所有这些消息。我们使用基于 amqplib这个节点库。此外,处理程序立即确认传入的消息 - 业务逻辑是绝对异步的。因此,即使没有任何业务逻辑,它也会卡住。交换器的类型是

topic
,它不是
durable
并且队列启用了
auto-deleting
功能。我们尝试禁用预取,预取 =
1
100
,但没有成功。

所以..

1)您使用哪个 AMQP/RabbitMQ 节点库?
2) 每秒处理多少条消息?
3)还有什么进一步的改进/建议?

谢谢!

javascript node.js rabbitmq amqp
1个回答
2
投票

事实上,您有一个可以正常工作的 Java 使用者,这表明

amqplib-easy
amqplib
或您的代码是罪魁祸首。另请注意,在 RabbitMQ 中使用单个队列是一种反模式,因为队列是代理中的并发单位。

我已经整理了一个测试项目,其中包括使用RabbitMQ PerfTest应用程序(Java)运行节点消费者的

README
。您应该熟悉 PerfTest,因为它提供了许多用于评估环境性能的功能。

在我的测试环境中,我可以轻松维持

4096
消息/秒的发布速率。如果我将其增加到
8192
,我可以看到消息备份,因为 Node 应用程序的消耗速度不够快。使用“普通”进行比较也会很有趣
amqplib

© www.soinside.com 2019 - 2024. All rights reserved.