0
我对PHP使用的是芹菜https://github.com/gjedeer/celery-php。可靠性对于我们的项目很重要。所以我想确保所有计划的任务都会执行甚至Rabbitmq崩溃。所以我安排了一项任务,然后我停止了Rabbitmq并重新开始。当预定的时间到了,任务不执行。 这是我的任务。acks_late在Rabbitmq崩溃后未恢复计划的任务
from celery import Celery
import subprocess
app = Celery('tasks', backend='amqp', broker='amqp://')
@app.task(acks_late=True)
def hipoCheckSubscriptions(args):
return subprocess.call(['php54','/path/to/script', '--args='+args])
请帮助,我做错了什么?有没有我的情况下的食谱。
检查Celery创建的队列是否持久/持久。如果没有,请查找适当的Celery设置。请参阅Celery-PHP构造函数中的$ persistent_messages。此外,请检查:https://stackoverflow.com/questions/5046944/why-is-rabbitmq-not-persistent-messages-on-a-durable-queue – GDR 2014-11-24 11:06:46
@gdr是的,你是正确的** celery-php * * ** $ persistent_messages **选项。但我用我的网络应用程序Yii extenstion叫** celery-yii **。他们在设置中错过了这个选项,或者我找不到它。所以我重写** celery-yii **使消息持久。我的解决方案在下面。 – 2014-11-26 04:07:00
有道理。如果您正在积极使用celery-yii,请考虑为该项目贡献一些工作 - 他们与celery-php分开,并且看起来他们在功能上有点落后。 – GDR 2014-11-26 15:41:42