Я использую сельдерей с https://github.com/gjedeer/celery-php для 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])
Пожалуйста, помогите, что я делаю не так? И есть ли рецепты для моего случая.
Я использовал расширение Yii, называемое celery-yii, для моего веб-приложения. Я не нашел никаких параметров стойкости сообщений в конфигурации расширения по умолчанию. Поэтому я искал все классы расширений, чтобы найти, какой метод отвечает за отправку сообщений в сельдерей. Я обнаружил, что это сельдерей :: PostTask метод. В $ Params массив передает параметры публикации сообщений на биржу сельдерея. Поэтому я добавил еще один вариант delivery_mode = 2 для долговечности сообщения. И это сообщение сохранилось после сбоя RabbbitMQ. Так что я решил свои проблемы таким образом.
Других решений пока нет …