docker / microservice中的RabbitMQ监听器

时间:2019-03-14 08:52:21

标签: docker rabbitmq microservices amazon-ecs

我已经在aws ecs中部署了一些微服务(通过CI / CD通过jenkins)。每个任务都有其自己的服务和任务定义。 Apache在前台运行,如果apache崩溃,则将从其服务中部署docker。

我的开发团队正在使用RabbitMQ在微服务之间进行通信。很少有微服务需要监听RabbitMQ服务器中的特定事件(Rabbit安装在单独的新闻ec2实例上)

要监听Rabbit MQ服务器,我们应该将监听器作为守护程序运行吗?开发团队已要求在docker部署时运行以下代码,以便它可以侦听Rabbit MQ服务器。

php /app/public/yii queue/listen

并设置cron作业,以便侦听器在崩溃时启动。 据我所知,docker容器只能在前台运行一个进程。目前,Apache在前台运行。如果我尝试在后台运行守护程序(cron和Rabbit mq侦听器),则当这些守护程序中的任何一个崩溃时,docker容器都不会重新启动。

在这种情况下,有没有更安全的方法?在docker容器中运行Rabbit MQ侦听器的最佳实践是什么?

1 个答案:

答案 0 :(得分:2)

如果您的问题是要在容器中运行更多的进程,则更通用的概念是创建脚本,例如。容器中的start_service.sh并在docker文件的CMD指令中执行。像这样:

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

sleep infinite

&会使脚本在后台启动进程后继续运行,即使它并非旨在作为守护程序运行也是如此。最后的sleep infinite将阻止脚本退出,从而退出容器。

如果您在容器中运行多个进程,请考虑在容器中使用像dumb-init这样的“ init”进程。在此处https://github.com/Yelp/dumb-init/blob/master/README.md

了解更多