Docker и php worker`ы в контексте очередей (rabbitmq)
Добрый день!
Сразу оговорюсь, речь идет о dev-окружении, до прода еще далеко.
Хочу заюзать очереди. PHP 7.2 крутится на apache на чистом образе из Ubuntu 18.04 LTS. Управляю через docker-compose. Встал вопрос, а как запускать слушателя очереди (или демона-обработчика очереди), ведь один процесс - один контейнер и все такое ... ?
Ну как всегда есть вариант с Supervisor. Вариант знаком мне по предыдущим образам, там в основе как раз был image, который держал apache бэкграундным процессом с помощью Supervisor.
Дело вроде бы нехитрое и даже воркеров можно сколько угодно наплодить в одном контейнере, пока они всю память не выжрут, но что-то меня держит за душу. Ну и я всегда изучаю новое с прицелом «а как потом все таки в проде это будет работать».
Есть идея сделать каждый воркер отдельным контейнером, но возможно, будет геморрой, когда нужно будет убить воркер. Я про команду php artisan queue:restart. Она мягко убивает воркеров, чтобы не потерять задачи и высвобождает ресурсы. Как я понимаю, процедура эта потребуется часто, т.к. будут они со временем повисать и терять коннект к БД, в которую они должны писать инфу о проваленных задачах. Еще из минусов, вероятно, при большом количестве воркеров сильно вырастет docker-compose.yml, что не сильно приятно и удобно, хотя и не супер критично.
Кто подскажет, как такие вещи делают? Инфы мало нашел по теме, увы.
P.S. я мог быть неточен в терминологии или даже по-крупному что-то напутать, заранее прошу прощения, я только начинаю работать с очередями. К примеру, worker, в моем понимании - тот процесс, который выполнит задачу, но как он связан со слушателем очереди (или демоном-обработчиком очереди), я не очень представляю. Вроде бы как раз этот слушатель сам умеет управлять воркерами. Если считает, что тот умер, создаст нового (и тут не совсем понятно, как отработает supervisor). В общем поправьте, кто в теме.
P.S. уже напутал: тот процесс, который запускается с помощью php artisan queue:work - и есть «воркер», он же демон, при запуске с опцией --daemon. И именно его будет реанимировать supervisor. Неплохой перевод доки laravel по самим очередям https://laravel.ru/docs/v5/queues