nepster-web
@nepster-web

Как сделать работу воркера (Gearman) в синхронном режиме ?

В моем проекте есть такая сложная штука как активация пользователя. Это дело состоит из нескольких компонентов и работает постоянно с ветками структур пользователя. Поэтому выполнение активации происходит достаточно медленно.

Итак при активации многие пользователи должны в порядке очереди получать бонусы, поэтому очень важно делать активацию последовательно.

Я выбрал для этой задачи gearman, а именно расширение для моего фраэмворка
https://github.com/Filsh/yii2-gearman

Настроил это дело, все хорошо, все работает. Теперь возник вопрос касательно именно синхронного выполнения задания.

У меня есть воркер с нужной мне функцией и я в фоне отправляю на него задание:
e0ca31bc1edc424584479b425060adf3.png

Я тестировал очередь на записи данных в файл с sleep() и вроде работает все синхронно, тоесть пока не отработает 1 файл, второй не создается.

Теперь такой вопрос, как можно остановить выполнение всех задач в очереди если 1 задача по какой-то причине не выполнилась ?
  • Вопрос задан
  • 2740 просмотров
Пригласить эксперта
Ответы на вопрос 1
@imaliy
Конкретно в этом расширении yii gearman/stop остановит все воркеры, но задачи так и остануться висеть в памяти.
Если задача завершилась не удачей, то она не должна удаляться из очереди. В вашем случае нужно предусмотреть какой то флаг(в базе, лок файл) по которому можно будет определять можно ли выполнять следующие задания или нет, ну и обновлять этот файл в зависимости от статуса пердыдущего задания.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы