Laravel Horizon не выполняет отложенные задания - среда Kubernetes и Docker

У нас есть два разных модуля в Kubernetes для нашего приложения Laravel,

  • один запущенный apache, обслуживающий порт 80, (CMD / usr / sbin / apache2ctl -D FOREGROUND)
  • и еще один работающий рабочий (Laravel Horizon) (CMD php / var / www / artisan horizon)

Проблема в том, что когда я проверяю панель управления Horizon, на ней написано «Активно», и я вижу задания в разделе «Ожидающие задания», но на самом деле они никогда не выполняются. Они просто сидят без дела.

Теперь, когда я использую SSH в модуле с запущенным apache и вручную и запускаю команду «php artisan horizon», он фактически выполняет все ожидающие задания.

Я уже обеспечил следующее:

  1. Оба модуля подключены к одной и той же службе базы данных Redis.
  2. Префикс Horizon одинаков для обоих модулей.

person Ambuj Soni    schedule 06.06.2020    source источник
comment
Я думаю, вы должны запустить его с супервизором, установить супервизор в контейнер, а затем запустить контейнеры и посмотреть, что произойдет.   -  person Adnan Mumtaz    schedule 06.06.2020
comment
@AdnanMumtaz Я пробовал, но ничего не изменилось.   -  person Ambuj Soni    schedule 06.06.2020


Ответы (3)


После нескольких дней борьбы я получил ответ на эту проблему.

При использовании Redis в качестве кеша, очереди или посредника широковещательной рассылки в среде докеров нам необходимо убедиться, что следующие переменные среды определены правильно и должны быть одинаковыми для всех модулей.

  • CACHE_PREFIX
  • REDIS_PREFIX
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

Надеюсь, это поможет другим, пытающимся развернуть приложения Laravel с помощью Kubernetes и Docker.

person Ambuj Soni    schedule 07.06.2020
comment
Я столкнулся с той же проблемой. какой тип Redis вы используете? мы пробуем корпоративную версию. похоже, не работает. что-нибудь еще я должен проверить. переменные env одинаковы как для API, так и для рабочего модуля очереди Horizon - person aibarra; 22.06.2020
comment
@aibarra, я знаю, что уже поздно, надеюсь, вы уже догадались. Просто чтобы ответить вам, я думаю, что тип Redis не имеет значения, пока все ваши приложения (все микросервисы) не взаимодействуют с одним и тем же экземпляром Redis. И если у вас уже есть решение, было бы здорово, если бы вы могли поделиться им здесь, это может помочь другим. Спасибо! - person Ambuj Soni; 01.10.2020
comment
Мы собирались затронуть эту проблему, и я наткнулся на этот пост, много раз рассказал о стратегии, спасибо - person jision; 07.12.2020
comment
Хороший момент также в config / database.php. Нам нужно поместить отдельный REDIS_DB для CACHE, EVENT, SESSION и HORIZON. - person Rajnish Mishra; 17.12.2020

В моем случае мне нужно изменить среду моего приложения с prod на production.

APP_ENV=production
person Linh Pham    schedule 18.03.2021

Дважды проверьте, соответствует ли ваш APP_ENV одной из сред в конфигурации Horizon.php. В противном случае горизонт не запустит никаких работников очереди.

По умолчанию предоставляются только среды local и production:

https://laravel.com/docs/8.x/horizon#environments

person Mostafa Bahri    schedule 20.04.2021