docker - 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 的最佳实践是什么?
解决方案
如果您的问题是在容器中运行更多进程,则更一般的概念是创建脚本,例如。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
推荐阅读
- asp.net - 我如何在我的 asp.net MVC 核心 Web 应用程序中引用静态文件
- sql - ODI 程序中的 ORA-00933
- javascript - 对象数组到按属性分组的对象数组
- vba - 高级搜索范围设置为多个邮箱
- ruby - 计算两个日期之间的天数 [始终保持最多 30 天的月份]
- javascript - 获取本地存储数据并显示在页面上
- tensorflow - 当 tensorflow.io.read_file 无法读取时会发生什么
- javascript - 无法导入同位素插件---“$(container).isotope 不是函数”
- java - Jetty v9.4.5 中的 SessionHandler 变为 null
- azure-functions - 在 Azure 函数日志中输出 JSON