【问题标题】:RabbitMQ listener in docker/microservicedocker/microservice 中的 RabbitMQ 监听器
【发布时间】:2019-08-05 02:24:36
【问题描述】:

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

【问题讨论】:

    标签: docker rabbitmq microservices amazon-ecs


    【解决方案1】:

    如果您的问题是在容器中运行更多进程,则更一般的概念是创建脚本,例如。 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2018-12-04
      • 2013-12-17
      • 2017-07-30
      相关资源
      最近更新 更多