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

0

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

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

  • 0
    Проверьте, является ли очередь, которую создает Celery, постоянной / долговечной. Если нет, ищите подходящие настройки для сельдерея. Смотрите $ persistent_messages в конструкторе Celery-PHP. Также проверьте: stackoverflow.com/questions/5046944/…
  • 0
    @gdr Да, вы правы насчет опции celery -php $ persistent_messages . Но я использовал расширение Yii под названием celery -yii для моего веб-приложения. Они пропустили эту опцию в настройках или я не смог ее найти. Поэтому я переопределяю celery-yii, чтобы сообщения были долговечными. Мое решение ниже.
Показать ещё 2 комментария
Теги:
rabbitmq
celery

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню