Как управлять очередями Laravel при развертывании? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть архитектура высокой доступности для Laravel с несколькими веб-серверами и серверами очередей и развертыванием без простоев.Он полагается на Redis в качестве драйвера очереди.

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

Есть ли способ в Laravel фильтровать задания, поступающие из другой версии кода, чем работник очереди?

1 Ответ

0 голосов
/ 25 сентября 2019

Я вижу 2 решения, даже если я никогда не пробовал, и я не могу гарантировать, что это работает, так как я не буду описывать все технические проблемы, с которыми вы можете столкнуться.

В обоих случаях вам нужна версия кода, хранящаяся где-то в env /config с обновлением при каждом выпуске.

Первое решение

Для всех заданий, связанных с этой проблемой, значение версии должно быть частью параметров, которые отправляются вместе с самим заданием.

В начале функции дескриптора задания сравните эту версию из задания param = версия из работника env.Если нет необходимости перераспределять задание ... оно может быть обработано верной «версией» работника, или вы можете просто и просто отказаться от него.

Второе решение

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...