我正在尝试在基于RabbitMQ的应用程序中应用一些流控制。
关于我的系统的简短介绍:
在交换中“存储”的数据非常大,并且需要花费大量时间处理工人。一段时间后,我收到RabbitMQ的内存警告,指出内存使用率过高,并且所有发布操作都已停止。
我试图增加Rabbitmq使用的内存量,但这只是将问题推迟了几个小时(运行时)。我还使队列基于磁盘而不是基于ram,但是我的磁盘已满。
由于我的输入量不是很大,所以我可以忍受“大”输入队列,蓝工从中读取他们的输入。因此,我想尝试在蓝工与交易所之间的链接上设置一些“最大长度”。我相信我不会在这里放过任何东西,因为系统的真正瓶颈是红色工人(通过我声明红色工人和使用prefech_count=2
进行交换之间的联系的方式)。
在说完所有这些之后...我没有设法应用这样的最大长度:(
我正在使用Pika
声明队列并使用通道。
我读了这个(https://www.rabbitmq.com/maxlength.html),但是没有设法在我的代码中实现它,我想看一个使用此max-size标志的示例。
答案 0 :(得分:0)
交易所不存储消息:队列可以存储消息。
如果设置队列的最大长度,在arguments
调用中设置相应的queue_declare()
,则不适合它的消息将被丢弃。
但是,发布者可以在不通知的情况下将消息发布到交易所。
制作人可以使用dead-lettering来通知他们失败。
如果您需要代码方面的帮助,请在问题中包含代码。