当发布者终止时,任务在 celery amqp 中徘徊

Tasks linger in celery amqp when publisher is terminated

我正在使用 CeleryRabbitMQ 服务器。我有一个发布者,它可能会被 SIGKILL 终止,并且由于无法监视此信号,所以我无法撤销任务。撤销发布者不再存在的任务的常见方法是什么?

我在 worker 端尝试了一个间隔,但是发布者显然没有注册为 worker,所以我不知道如何检测超时

celery 没有内置任何东西来监视生产者/发布者状态——只有工人/消费者状态。您还可以考虑其他替代方案,例如使用必须由发布者定期更新的 Redis 过期密钥,它可以作为发布者是否存在的代理。然后在任务中检查发布者的标志是否仍然存在于 Redis 中,如果不存在则任务 returns 什么都不做。

我很确定 Celery 无法满足您的需求,因此我建议您改变逻辑并重新设计所有内容,使其成为 Celery workflow (or several Celery canvases depends on the actual use-case). My experience with Celery is that you can build literally any workflow you can imagine with those Celery primitives and/or 自定义 Celery 签名的一部分。

另一种适用于我的情况的解决方案是仅在当前处理的任务完成后才添加下一个任务。在这种情况下,队列不会填满。