Celery任务中的eta会从RabbitMQ中删除。

9
我正在使用 Django 1.6、RabbitMQ 3.5.6 和 celery 3.1.19。有一个定期任务每 30 秒运行一次,并创建了 200 个带有给定 eta 参数的任务。在我运行 celery worker 后,队列会缓慢地在 RabbitMQ 中创建,并且我看到大约有 1200 个计划任务等待执行。然后,我重新启动 celery worker,所有等待的 1200 个计划任务都从 RabbitMQ 中删除。
我是这样创建任务的:my_task.apply_async((arg1, arg2), eta=my_object.time_in_future) 我像这样运行 worker:python manage.py celery worker -Q my_tasks_1 -A my_app -l 在 Django 设置中,CELERY_ACKS_LATE 设置为 True。我找不到任何可能的原因。
我应该用不同的配置/标志/参数来运行 worker 吗? 有什么想法吗?

  1. 你确定只重启了工作进程而不是整个Rabbit服务器吗?
  2. 或许你设置了一些任务的“ttl”时间,它会在此时间后被移除?
- matino
  1. 我确定只有工作人员被重新启动。
  2. 任何配置中都没有设置任务的 TTL 时间。这是默认设置。但如果我保持工作人员处于打开状态,则任务仍会留在队列中。
- Emin Bugra Saral
请问您能分享一下调试日志吗? - the_drow
1个回答

1
据我所知,Celery不依赖于RabbitMQ的定时队列。它在内部实现了ETA/Countdown。
看起来你有足够的工作进程能够获取足够的消息并在内部进行调度。
请注意,你不需要200个工作进程。你已将预取乘数设置为默认值,因此需要较少的工作进程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接