在我们的项目中,我们希望使用“任务队列”模式中的RabbitMQ来传递数据。
在生产者端,我们构建了几个TCP服务器(在node.js中)来接收高并发数据并将其发送到MQ,而无需执行任何操作。
在使用者端,我们使用JAVA客户端从MQ获取任务数据,处理它,然后确认。
所以问题是:为了获得最大的消息传递吞吐量/性能(例如,400,000 msg/秒),多少个队列是最佳的?更多的队列是否意味着更好的吞吐量/性能?还有什么是我应该注意的吗?在这样的场景中使用RabbitMQ有什么已知的最佳实践指南吗?
任何意见都是非常感谢的!
发布于 2012-04-06 08:17:07
为了在RabbitMQ中获得最佳性能,请遵循其创建者的建议。在RabbitMQ blog中:
当队列为空时,
RabbitMQ的队列速度最快。当队列是空的,并且它让使用者准备好接收消息时,一旦队列接收到消息,它就会直接发送给使用者。在持久队列中的持久消息的情况下,是的,它也将进入磁盘,但这是以异步方式完成的,并且缓冲很重。主要的一点是,需要做的记账工作很少,修改的数据结构很少,需要分配的额外内存也很少。
如果你真的想深入研究RabbitMQ队列的性能,他们的这个other blog entry会更深入地研究数据。
发布于 2012-08-30 09:44:11
根据我曾经从rabbitmq-讨论邮件组得到的回复,你还可以尝试其他方法来增加吞吐量和减少延迟:
发布于 2014-11-04 21:59:32
您将通过更大的预取计数来增加吞吐量,同时确认来自消费者的多条消息(而不是为每条消息发送ACK )。
但是,当然,启用多重标志的确认(http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack)需要在消费者应用程序(http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html)上使用额外的逻辑。您必须保留从代理传递的消息的传递标记列表、它们的状态(无论您的应用程序是否已处理它们),并在处理完传递标记小于或等于NDTAG的所有消息时,每隔N个传递标记(NDTAG)确认一次。
https://stackoverflow.com/questions/10030227
复制相似问题