Слушатель RabbitMQ в докере / микросервисе - PullRequest
2 голосов
/ 14 марта 2019

Я развернул несколько микросервисов в aws ecs (через CI / CD и jenkins). У каждой задачи есть свой сервис и определение задачи. Apache работает на переднем плане, и докер будет развернут из своего сервиса в случае сбоя apache.

Моя команда разработчиков использует RabbitMQ для связи между микросервисами. немногие микросервисы должны прослушивать определенное событие на сервере RabbitMQ (Rabbit установлен на отдельном экземпляре news ec2)

Для прослушивания сервера rabbit MQ мы должны запускать слушатель как демон? Команда разработчиков попросила выполнить следующий код во время развертывания докера, чтобы он прослушивал сервер rabbit mq.

php /app/public/yii queue/listen

и установите задание cron, чтобы слушатель запускался при его падении. Насколько мне известно, Docker-контейнер может запускать только один процесс на переднем плане. В настоящее время Apache работает на переднем плане. Если я попытаюсь запустить демона (слушателя cron и rabbit mq) в фоновом режиме, контейнер Docker не будет перезапущен, если какой-либо из этих демонов потерпит крах.

Есть ли более безопасный подход для этого сценария? Какова наилучшая практика для запуска rabbit mq listener в Docker-контейнере?

1 Ответ

2 голосов
/ 14 марта 2019

Если ваша задача - запустить больше процессов в контейнере, более общая концепция - создать скрипт, например.start_service.sh в вашем контейнере и выполните это в директивах CMD вашего файла Docker.например:

#!/bin/bash  
process1 ... &  
process2 ... &  
daemon-process1   

sleep infinite

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

Если вы запускаете несколько процессов в своем контейнере, рассмотрите возможность использования процесса init, такого как dumb-init в контейнере.Подробнее здесь https://github.com/Yelp/dumb-init/blob/master/README.md

...