如何确保 RabbitMQ 中的流量控制永远不会被触发



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

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

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

理想情况下,虽然您应该专注于加快消费者端的处理速度,并可能扩大该部分,但是在发布商繁忙时有一些东西可以限制它应该有助于防止堆积。

最新更新