如何使用AMQP / Node

时间:2017-11-02 17:14:30

标签: javascript node.js rabbitmq amqp

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

现在我们真的很好奇如何使用单个消费者处理所有这些消息。因为已经有一些Java消费者处理所有这些消息而没有任何延迟。我们根据this node library使用amqplib。此外,处理程序立即确认传入的消息 - 业务逻辑绝对是异步的。因此即使没有任何业务逻辑,它也会停滞不前交换的类型为topic,不是durable,并且队列启用了auto-deleting功能。我们尝试停用预取,预取= 1100,但没有成功。

所以..

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

谢谢!

1 个答案:

答案 0 :(得分:1)

RabbitMQ团队监视this mailing list,有时只回答有关stackoverflow的问题。

您有一个正常工作的Java使用者这一事实指向amqplibREADME或您的代码作为罪魁祸首。另请注意,在RabbitMQ中使用单个队列是一种反模式,因为队列是代理中并发的单位。

我已经使用RabbitMQ PerfTest应用程序(Java)运行了一个test project,其中包含4096运行Node使用者。您应该熟悉PerfTest,因为它提供了许多用于评估环境性能的功能。

在我的测试环境中,我可以轻松维持8192 msg /秒的发布速度。如果我将其增加到amqplib,由于节点应用程序无法足够快地消耗,我可以看到消息备份。使用&#34; plain&#34;进行比较会很有趣。 <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> <!-- linesToSkip => The number of lines to skip at the beginning of the file. This feature is particularly useful to handle file headers. --> <property name="linesToSkip" value="1" /> 也是如此。