【问题标题】:Problem with connection to RabbitMQ on container在容器上连接到 RabbitMQ 的问题
【发布时间】:2019-05-28 20:25:43
【问题描述】:

更新: 事实证明,rabbitmq 使用的端口不是 15672。我在 ConnectionFactory 块中将端口号从 15672 更改为 5672,并成功连接。

我一直在尝试设计一个简单的微服务架构来尝试和学习 docker & rabbitmq。所以我编写了这些 docker-compose.yml 文件,如下所示:

version: '3.4'

networks:
 customqueue:

services:
  feed.api:
    image: feed.api:${TAG:-latest}
    build:
      context: .
      dockerfile: src/Services/Feed/Feed.Api/Dockerfile
    depends_on:
     - sqldata
     - rabbitmq
    ports:
     - "8000:80"
    networks:
     - customqueue

  like.api:
    image: like.api:${TAG:-latest}
    build:
      context: .
      dockerfile: src/Services/Like/Like.Api/Dockerfile
    depends_on:
     - rabbitmq
    ports:
     - "7000:70"
    networks:
     - customqueue

  rabbitmq:
    image: rabbitmq:3-management-alpine
    environment:
      RABBITMQ_DEFAULT_USER: "admin"
      RABBITMQ_DEFAULT_PASS: "password"
    ports:
      - "15672:15672"
      - "5672:5672" 
    networks:
     - customqueue 

feed.api 设计为订阅者,like.api 设计为发布者。但是,当我尝试运行 feed.api 的 .net 核心代码时,我在使用 RabbitMQ 时遇到了“所有端点都无法访问”的错误。容器上的 RabbitMQ 工作正常。我正在尝试在 Feed.Api 项目中的 Startup.cs 上定义如下 ConnectionFactory。

var factory = new ConnectionFactory()
{
    HostName = "rabbitmq",
    UserName = "admin",
    Password = "password",
    Port = 15672,
    Protocol = Protocols.DefaultProtocol,
    RequestedConnectionTimeout = 2000,
    VirtualHost = "/",
};

注意:

  • “admin”用户是管理员。

  • rabbitmq-management 插件已启用。

编辑:rabbimq:3-managament-alpine 显然是一个旧图像。将此更新到最新版本可能会有所帮助,但我不确定。有人知道吗?

【问题讨论】:

    标签: .net docker .net-core docker-compose rabbitmq


    【解决方案1】:

    从 api 中将 links: 部分添加到 rabbitmq 容器,否则他们不知道“rabbitmq”主机名。

    在 docker 命令中不推荐使用链接,但 not in docker-compose

      feed.api:
        image: feed.api:${TAG:-latest}
        build:
          context: .
          dockerfile: src/Services/Feed/Feed.Api/Dockerfile
        depends_on:
         - sqldata
         - rabbitmq
        links:
         - rabbitmq
        ports:
         - "8000:80"
        networks:
         - customqueue
    
      like.api:
        image: like.api:${TAG:-latest}
        build:
          context: .
          dockerfile: src/Services/Like/Like.Api/Dockerfile
        depends_on:
         - rabbitmq
        ports:
         - "7000:70"
        links:
         - rabbitmq
        networks:
         - customqueue
    
      rabbitmq:
        image: rabbitmq:3-management-alpine
        environment:
          RABBITMQ_DEFAULT_USER: "admin"
          RABBITMQ_DEFAULT_PASS: "password"
        ports:
          - "15672:15672"
          - "5672:5672" 
        networks:
         - customqueue 
    

    【讨论】:

    • 链接在 docker-compose 中被弃用:docs.docker.com/compose/compose-file/#links
    • 这个问题被提出、回答和接受还不到两年前。此外,您所提到的内容在答案中的链接中得到了特别说明。请不要在阅读答案之前发表评论?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2022-01-27
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多