我在Celery
服务器上使用RabbitMQ
。我有一个发布者,该发布者可能会被SIGKILL
终止,并且由于无法观察到该信号,因此无法撤消任务。在发布者不再活跃的情况下,撤销任务的常见方法是什么?
我在工作人员端进行了间隔试验,但是发布者显然未注册为工作人员,所以我不知道如何检测超时
答案 0 :(得分:6)
芹菜没有内置任何东西可以监视生产者/发布者的状态,只有工人/消费者的状态。您还可以考虑其他替代方法,例如,使用Redis过期密钥,该密钥必须由发布者定期更新,该发布者可以充当发布者是否还活着的代理。然后在任务中检查是否在redis中仍然存在发布者的标志,如果不是,则该任务返回不执行任何操作。
答案 1 :(得分:4)
我很确定Celery无法实现您想要的功能,因此建议您改变逻辑,重新设计所有内容以使其成为Celery workflow的一部分(或者一些Celery画布取决于实际用例) )。我在Celery上的经验是,您可以使用这些Celery primitives和/或自定义Celery签名构建您可以想象的任何工作流程。
答案 2 :(得分:4)
另一个适用于我的解决方案是仅在当前处理的任务完成后才添加下一个任务。在这种情况下,队列不会填满。