Docker-compose 如何重复启动一个服务,以支持多消费者模型
上图描述了我的工作流程,我希望可以有多个消费者来快速消化 RabbitMQ
queue 中的消息
?下面是我的 docker-compose.yml
文件:
version: "3"services:
http_api_service:
container_name: http_api_service
image: vo/service
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
ports:
- "63000:63000"
command: uvicorn api:app --host '0.0.0.0' --port 63000
console_service:
container_name: console_service
image: vo/service
network_mode: "host"
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
command: nameko run services:ConsoleService --config ./config.yaml
http_api_service
即为 MQ 生产者角色,接受 HTTP 请求,并把消息放到 MQ 中console_service
即为 MQ 消费者角色,由 MQ 主动 push 消息,或者主动去 MQ 中获取消息
我发现 console_service
在一个进程下的消费能力比较欠缺,希望通过多进程,多开启一些消费者进程来提高消费速度
此时我有以下两种方案:
- 方案一:在同一个容器中运行多个消费者进程,通过一个容器内的多进程技术来增加消费者的数量
- 方案二:一个容器一个消费者进程,通过多开容器来增加消费者的数量
如果采用前一种方案,存在一个问题,就是无法动态增减消费者的数量,需要通过 restart
容器的方式来增减消费者的数量,而且这貌似也违反了官方一个容器一个进程的使用建议
如果采用第二种方案,如何在 docker-compose
中优雅的实现呢?
假设用下面的方式:
version: "3"services:
http_api_service:
container_name: http_api_service
image: vo/service
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
ports:
- "63000:63000"
command: uvicorn api:app --host '0.0.0.0' --port 63000
console_service00:
container_name: console_service00
image: vo/service
network_mode: "host"
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
command: nameko run services:ConsoleService --config ./config.yaml
console_service01:
container_name: console_service01
image: vo/service
network_mode: "host"
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
command: nameko run services:ConsoleService --config ./config.yaml
console_service02:
container_name: console_service02
image: vo/service
network_mode: "host"
env_file:
- .env
logging:
driver: json-file
options:
max-size: "20m"
max-file: "1"
command: nameko run services:ConsoleService --config ./config.yaml
? 手工在 console_service
后面加上 00
、01
、02
这样子的后缀,但是这样子非常的不优雅!!!!? 请问如何结果这个问题呢?
貌似没有查询到 docker-compose
对这方面的支持
鄙人目前没有
使用过Docker Swarm
和Kubernetes
,不知道这个问题是否可以用这两个容器编排工具解决呢?
回答:
https://stackoverflow.com/que...
以上是 Docker-compose 如何重复启动一个服务,以支持多消费者模型 的全部内容, 来源链接: utcz.com/p/938214.html