我尝试应用了基于RabbitMQ的在我的应用程序的一些流量控制。
一个很窄的简短过我的系统:
那就是“存储”在交换的数据是相当大的,并且需要一个工人走在它的时间是明显的。过了一段时间我正在从RabbitMQ的内存警告其中规定,内存占用率过高和所有发布操作都将停止。
我试图增加内存的RabbitMQ的量使用,但它只是推迟问题,在几个小时内(运行时)。我也做了,而不是基于RAM的队列基于磁盘的,但我的磁盘得到充分代替。
因为我的投入并不大,我可以从蓝色工读取输入一个“大”输入队列生活。所以我想尝试,并设置一些“最大长度”的蓝工人与交换机之间的链路上。我相信,因为我的系统的真正瓶颈是红色工(由我宣布红工人,并用prefech_count=2
交易所之间的联系方式)我不会在这里失去任何东西。
说一切之后...我没能施加这样的最大长度:(我使用Pika
宣布我的队列,并与渠道合作。我读到这(https://www.rabbitmq.com/maxlength.html),但没能实现它在我代码,我希望看到使用该最大尺寸的标志的例子。
交流不存储消息:队列做。
如果你设置了队列的最大长度,设置在arguments
调用相应的queue_declare()
,这将不适合它的消息,会被丢弃。
然而出版商将能够发布消息的交换没有注意到它。
生产者可以得到有关他们未能使用dead-lettering通知。
如果你想一些帮助的代码,包括在问题的代码。