首页 > 解决方案 > 带有 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 集群之外会更好吗?

有什么建议么?

标签: dockerrabbitmqamazon-ecs

解决方案


两种选择:

  1. 是的,在 ECS 集群外运行 Rabbit 服务器。由于它具有与之关联的持久状态,因此很难在节点之间移动或复制,因此在 ECS 中管理它并没有太多好处。

  2. 要求 AWS在 ECS 中的 RabbitMQ 前面部署一个负载均衡器。您可以为该负载均衡器提供其自己的 DNS 名称(通过 Route 53)或使用其默认名称,但无论哪种方式,您都可以使用该 DNS 名称来引用 RabbitMQ,并且它将路由实际运行它的任何主机。


推荐阅读