0

我有一个发布者以比消费者可以消费的稍大的速度推入队列。对于少量的消息,还可以,但是对于非常多的消息,RabbitMQ 开始将其写入磁盘。在某个时间点,磁盘变满,触发流控。从那时起,利率真的很慢。有没有办法在集群节点之间减少或分担这种负载?我应该如何设计我的应用程序以便永远不会触发流量控制?我在三个具有 13G RAM 和 10G 系统磁盘空间的节点上使用 RabbitMQ 3.2.3 - 通过集群相互连接。其中两个是 RAM 节点,剩下的一个是磁盘节点,也用于 RabbitMQ 管理插件。

4

1 回答 1

1

您可以调整配置、升级硬件等,最后您可能希望在 RabbitMQ 服务器前面放置一个负载平衡器,以平衡多个 RabbitMQ 节点之间的负载。这里的问题是,如果你的发布速度高于你的消费速度,最终你会一次又一次地遇到这个问题。

我认为防止这种情况发生的最好方法是在发布者端实现逻辑,以跟踪队列中等待处理的请求数量。如果请求数超过 X,则发布者要么等到消息数量减少,要么以较慢的速度发布新消息。这种类型的解决方案当然取决于发布的消息来自何处,如果它们是用户提交的(例如通过浏览器或客户端),您可以在队列建立时显示加载栏。

理想情况下,尽管您应该专注于加快消费者端的处理速度,并可能扩大该部分的规模,但在发布者忙碌时有一些东西来限制它应该有助于防止累积。

于 2015-03-17T19:30:29.507 回答