我们目前正在创建一个微服务(Nodev8.3.0),它必须每秒消耗大约60-150条RabbitMQ消息(RabbitMQ 3.6.12,Erlang19.2.1)。有时候,它就像一种魅力,队列中没有剩下的消息。但是,大多数情况下,只有5-20条消息每秒被处理并累积到队列中的3M条消息。
现在我们真的很好奇如何用一个用户来处理所有这些消息。因为已经有一些Java使用者不延迟地处理所有这些消息。我们使用基于这个节点库的amqplib。此外,处理程序立即确认传入的消息-业务逻辑绝对是异步的。因此,即使没有任何业务逻辑,它也会陷入困境。交换的类型是topic
,它不是durable
,队列启用了auto-deleting
功能。我们尝试了禁用的预取、预取= 1
和100
,但没有成功。
所以..。
1)用于节点的AMQP/RabbitMQ库是什么?
2)每秒处理多少条消息?
3)是否有进一步的改进/建议?
谢谢!
发布于 2017-11-03 17:14:43
RabbitMQ团队监视这个邮寄名单,有时只回答堆栈溢出的问题。
您拥有一个正确工作的Java使用者,这一事实表明amqplib-easy
、amqplib
或您的代码都是罪魁祸首。另外,请注意,在RabbitMQ中使用单个队列是一种反模式,因为队列是代理中的并发单元。
我已经组装了一个试验项目,其中包括一个README
,用于使用RabbitMQ PerfTest应用程序(Java)运行节点使用者。您应该熟悉PerfTest,因为它为评估环境的性能功能提供了许多特性。
在我的测试环境中,我可以轻松地维持4096
msg/秒的发布速率。如果我增加到8192
,我可以看到消息返回,因为Node应用程序消费速度不够快。比较使用“普通”amqplib
也会很有趣。
https://stackoverflow.com/questions/47081053
复制相似问题