如何使用AMQP /节点处理大于100个消息

我们目前正在构build一个微型服务(Node v8.3.0),它必须消耗RabbitMQ(RabbitMQ 3.6.12,Erlang 19.2.1)每秒大约60-150条消息。 有时它像一个魅力,队列中没有剩余的消息。 但大多数情况下,这些消息都是卡住的,每秒只能处理5-20条消息,并累积到队列中的3M消息。

现在我们真的好奇如何处理与一个消费者的所有这些消息。 因为已经有一些Java消费者没有任何延迟地处理所有这些消息。 我们使用基于amqplib的 这个节点库 。 此外,处理程序立即确认传入的消息 – 业务逻辑是绝对asynchronous的。 所以即使没有任何业务逻辑, 交换机的types是topic ,它不是durable ,队列启用了auto-deletingfunction。 我们尝试禁用预取,预取= 1100 ,没有任何成功。

所以..

1)您使用哪个节点的AMQP / RabbitMQ库?
2)每秒处理多less条消息?
3)有没有进一步的改进/build议?

谢谢!

RabbitMQ团队监视这个邮件列表,并且有时只回答关于计算器的问题。

事实上,你有一个正确工作的Java消费者指向amqplib-easyamqplib或你的代码作为罪魁祸首。 另外请注意,在RabbitMQ中使用单个队列是一种反模式,因为队列是代理中的并发单元。

我已经将一个包含README的testing项目放在一起,以便使用RabbitMQ PerfTest应用程序(Java)运行Node消费者。 您应该熟悉PerfTest,因为它提供了许多评估环境性能的function。

在我的testing环境中,我可以轻松维持4096 msg / sec的发布速率。 如果我增加到8192我可以看到消息备份,因为Node应用程序不能消耗得足够快。 使用“普通”的amqplib也是有趣的。