我使用celery 4
与RabbitMQ
作为经纪人。我限制Queue
(大小== 200)。我的主要代码如下:
for i in range(200):
tasks.delay(i)
如果i< = size的范围,它可以工作。如果我打电话给这样的话:
for i in range(2000):
tasks.delay(i)
大小限制为200,Queue
将被填满,其余任务将被跳过。
有谁能解释如何处理这种情况?我需要等到Queue
免费并insert
另一项任务。
由于
答案 0 :(得分:2)
这是RabbitMQ行为。 RabbitMQ docs。
一旦达到限制,将从队列前面删除或删除邮件,以便为新邮件腾出空间。
您可以通过修改配置在RabbitMQ中进行管理,也可以使用多个队列。 解决此问题的另一种方法是使用celery's apply_async,它可以让您设置重试值,eta或retry_policy。 BTW,delay()只是apply_async()的快捷方式。