Я использую Celery с 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. Поэтому я решил свои проблемы таким образом.