我正在使用带有https://github.com/gjedeer/celery-php的Celery用于PHP。可靠性对我们的项目很重要。所以我想确保所有计划的任务都执行,甚至Rabbitmq崩溃。所以我安排了一项任务,然后我停止了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])
请帮忙,我做错了什么?我的案子是否有任何食谱。
答案 0 :(得分:1)
我使用了一个名为celery-yii的Yii扩展程序,用于我的网络应用程序。我没有在扩展的默认配置中找到任何消息持久性设置。所以我搜索了所有扩展类,以找出负责将消息发布到芹菜的方法。我发现这是 celery :: PostTask 方法。在 $ params 数组中,它将消息发布设置传递给芹菜交易所。所以我为消息持久性增加了一个 delivery_mode = 2 选项。这条消息在RabbbitMQ崩溃后幸存下来。所以我用这种方式解决了我的问题。