如何使用 AMQP/Node 每秒处理 >100 条消息
How to handle >100 Messages per Second with AMQP/Node
我们目前正在制作一个微服务 (Node v8.3.0) 的原型,它必须每秒消耗 RabbitMQ(RabbitMQ 3.6.12、Erlang 19.2.1)的大约 60-150 条消息。有时它就像一个魅力,队列中没有剩余的消息。但是大多数时候消息卡住了,每秒只有 5-20 条消息得到处理,并且在队列中累积了多达 3M 条消息。
现在我们真的很好奇如何用一个消费者处理所有这些消息。因为已经有一些 Java 消费者在没有任何延迟的情况下处理所有这些消息。我们使用 this node library based on amqplib。此外,处理程序会立即确认传入的消息——业务逻辑是绝对异步的。因此,即使没有任何业务逻辑,它也会卡住。交换器的类型是 topic
,不是 durable
并且队列启用了 auto-deleting
功能。我们尝试禁用预取,预取 = 1
和 100
,但没有成功。
所以..
1) 您使用哪个 AMQP/RabbitMQ 节点库?
2) 每秒处理多少消息?
3) 还有 improvements/suggestions 吗?
谢谢!
RabbitMQ 团队监控 this mailing list 并且有时只在 Whosebug 上回答问题。
您的 Java 消费者可以正常工作这一事实表明 amqplib-easy
、amqplib
或您的代码是罪魁祸首。另外,请注意,在 RabbitMQ 中使用单个队列是一种反模式,因为队列是代理中的并发单位。
我已经将 test project 放在一起,其中包括 运行 上的 README
节点消费者和 RabbitMQ PerfTest 应用程序 (Java)。您应该熟悉 PerfTest,因为它提供了许多用于评估环境性能的功能。
在我的测试环境中,我可以轻松维持 4096
msg/sec 的发布率。如果我将其增加到 8192
,由于 Node 应用程序的消费速度不够快,我可以看到备份的消息。也可以使用 "plain" amqplib
进行比较。
我们目前正在制作一个微服务 (Node v8.3.0) 的原型,它必须每秒消耗 RabbitMQ(RabbitMQ 3.6.12、Erlang 19.2.1)的大约 60-150 条消息。有时它就像一个魅力,队列中没有剩余的消息。但是大多数时候消息卡住了,每秒只有 5-20 条消息得到处理,并且在队列中累积了多达 3M 条消息。
现在我们真的很好奇如何用一个消费者处理所有这些消息。因为已经有一些 Java 消费者在没有任何延迟的情况下处理所有这些消息。我们使用 this node library based on amqplib。此外,处理程序会立即确认传入的消息——业务逻辑是绝对异步的。因此,即使没有任何业务逻辑,它也会卡住。交换器的类型是 topic
,不是 durable
并且队列启用了 auto-deleting
功能。我们尝试禁用预取,预取 = 1
和 100
,但没有成功。
所以..
1) 您使用哪个 AMQP/RabbitMQ 节点库?
2) 每秒处理多少消息?
3) 还有 improvements/suggestions 吗?
谢谢!
RabbitMQ 团队监控 this mailing list 并且有时只在 Whosebug 上回答问题。
您的 Java 消费者可以正常工作这一事实表明 amqplib-easy
、amqplib
或您的代码是罪魁祸首。另外,请注意,在 RabbitMQ 中使用单个队列是一种反模式,因为队列是代理中的并发单位。
我已经将 test project 放在一起,其中包括 运行 上的 README
节点消费者和 RabbitMQ PerfTest 应用程序 (Java)。您应该熟悉 PerfTest,因为它提供了许多用于评估环境性能的功能。
在我的测试环境中,我可以轻松维持 4096
msg/sec 的发布率。如果我将其增加到 8192
,由于 Node 应用程序的消费速度不够快,我可以看到备份的消息。也可以使用 "plain" amqplib
进行比较。