RabbitMQ交换队列最大长度

时间:2019-02-06 10:50:07

标签: rabbitmq rabbitmq-exchange

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

关于我的系统的简短介绍:

  • 有些蓝工扫描并输入目录并将消息发布到交易所。
  • 还有其他红工从此交换中消费(基于路由密钥),并且对数据进行任何处理,然后将其删除。

在交换中“存储”的数据非常大,并且需要花费大量时间处理工人。一段时间后,我收到RabbitMQ的内存警告,指出内存使用率过高,并且所有发布操作都已停止。

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

由于我的输入量不是很大,所以我可以忍受“大”输入队列,蓝工从中读取他们的输入。因此,我想尝试在蓝工与交易所之间的链接上设置一些“最大长度”。我相信我不会在这里放过任何东西,因为系统的真正瓶颈是红色工人(通过我声明红色工人和使用prefech_count=2进行交换之间的联系的方式)。

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

1 个答案:

答案 0 :(得分:0)

交易所不存储消息:队列可以存储消息。

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

但是,发布者可以在不通知的情况下将消息发布到交易所。

制作人可以使用dead-lettering来通知他们失败。

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