acks_late не восстанавливает запланированные задачи после сбоя Rabbitmq

Я использую сельдерей с 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])

Пожалуйста, помогите, что я делаю не так? И есть ли рецепты для моего случая.

0

Решение

Я использовал расширение Yii, называемое celery-yii, для моего веб-приложения. Я не нашел никаких параметров стойкости сообщений в конфигурации расширения по умолчанию. Поэтому я искал все классы расширений, чтобы найти, какой метод отвечает за отправку сообщений в сельдерей. Я обнаружил, что это сельдерей :: PostTask метод. В $ Params массив передает параметры публикации сообщений на биржу сельдерея. Поэтому я добавил еще один вариант delivery_mode = 2 для долговечности сообщения. И это сообщение сохранилось после сбоя RabbbitMQ. Так что я решил свои проблемы таким образом.

1

Другие решения

Других решений пока нет …