首页 > 解决方案 > RabbitMQ 交换队列最大长度

问题描述

我正在尝试在基于 RabbitMQ 的应用程序中应用一些流控制。

我的系统的一个非常狭窄的简介:

交换中“存储”的数据非常大,工作人员检查它所花费的时间是显而易见的。一段时间后,我收到来自 RabbitMQ 的内存警告,指出内存使用率过高并且所有发布操作都已停止。

我试图增加 Rabbitmq 正在使用的内存量,但它只是将问题推迟了几个小时(运行时)。我还使队列基于磁盘而不是基于内存,但我的磁盘已满。

由于我的输入不是那么大,我可以忍受一个“大”输入队列,蓝色工人从中读取他们的输入。所以我想尝试在蓝工和交易所之间的链接上设置一些“最大长度”。我相信我不会在这里丢失任何东西,因为我系统的真正瓶颈是 red-workers(顺便说一下,我声明了 red-workers 和交易所之间的链接 a prefech_count=2)。

说了这么多之后......我没有设法应用这样的最大长度:(我Pika用来声明我的队列并使用频道。我读了这个(https://www.rabbitmq.com/maxlength.html ) 但没有设法在我的代码中实现它,我想看看一个使用这个 max-size 标志的例子。

标签: rabbitmqrabbitmq-exchange

解决方案


交换不存储消息:队列存储。

如果您设置队列的最大长度,argumentsqueue_declare()调用中设置相应的,不适合它的消息将被丢弃。

但是,发布者将能够在不注意的情况下将消息发布到交易所。

生产者可以使用dead-lettering获得有关它们失败的通知。

如果您需要代码方面的帮助,请在问题中包含代码。


推荐阅读