首页 > 解决方案 > docker/微服务中的 RabbitMQ 监听器

问题描述

我在 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 listener 的最佳实践是什么?

标签: dockerrabbitmqmicroservicesamazon-ecs

解决方案


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

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

sleep infinite

& 将使脚本在后台启动进程后继续运行,即使它的目的不是作为守护进程运行。最后的无限睡眠将阻止脚本退出,这将退出容器。

如果您在容器中运行多个进程,请考虑在容器中使用“init”进程,例如dumb-init。在这里阅读更多https://github.com/Yelp/dumb-init/blob/master/README.md


推荐阅读