docker - 带有 RabbitMQ 的 Amazon ECS
问题描述
我正在尝试将本地的 docker-compose 设置转换为带有任务的 ECS 集群。我的 docker-compose 设置如下所示:
version: '3'
services:
rabbit-mq-service:
image: rabbitmq:3.6-management
ports:
- "15672:15672"
- "5672:5672"
environment:
RABBITMQ_DEFAULT_USER: ***
RABBITMQ_DEFAULT_PASS: ***
service-a:
image: service-a:latest
depends_on:
- rabbit-mq-service
restart: on-failure
command: --spring.profiles.active=docker --spring.rabbitmq.host=rabbit-mq-service
service-b:
image: service-b:latest
depends_on:
- rabbit-mq-service
restart: on-failure
command: --spring.profiles.active=docker --spring.rabbitmq.host=rabbit-mq-service
这是非常简单的东西,在 Docker 中效果很好。我可以运行 docker-compose up 并获得 rabbitmq + 2 服务,这两个服务都可以连接到 rabbit 服务器。
现在,我可以将 service-a 和 service-b 部署到 ECS 集群,前提是我对 rabbit 服务器的主机名进行了硬编码。这意味着我需要有一个单独的 EC2 实例(或类似的东西)运行兔子服务器。我真的希望我的集群有一个兔子服务器,并让我的实例能够连接到它。到目前为止,没有运气。
将 Rabbit 服务器放在 ECS 集群之外会更好吗?
有什么建议么?
解决方案
两种选择:
是的,在 ECS 集群外运行 Rabbit 服务器。由于它具有与之关联的持久状态,因此很难在节点之间移动或复制,因此在 ECS 中管理它并没有太多好处。
要求 AWS在 ECS 中的 RabbitMQ 前面部署一个负载均衡器。您可以为该负载均衡器提供其自己的 DNS 名称(通过 Route 53)或使用其默认名称,但无论哪种方式,您都可以使用该 DNS 名称来引用 RabbitMQ,并且它将路由实际运行它的任何主机。
推荐阅读
- javascript - Javascript 填充字段给出未定义的函数错误
- mysql - 如何从表中获取每个 id 的最新状态?
- java - PHP to java-treeview 程序
- php - 在处理程序中调用api时如何停止recyclerview的闪烁
- android - 在没有 fcm 、 pusher 的情况下创建我自己的推送通知服务,
- python - 在最终的 GroupBy 中保留空箱/桶,即使没有数据填充它们
- selenium - testng.xml 套件如果失败则跳过所有测试类,它仅适用于 Microsoft Edge 浏览器
- c - c - find palindrome
- visual-studio-code - Haskero:以下 GHC 选项与 GHCi 不兼容,尚未传递给它:-threading
- algorithm - 给定代表单个出租车预订的数据序列(开始位置,结束位置),找到最佳非中断序列