从 Docker 容器内部使用 RabbitMQ

w00*_*977 5 c# rabbitmq docker

我正在尝试将 Docker 与应用程序一起使用。除了 Rabbit MQ 之外,一切似乎都有效。因此,为了创建测试用例,我做了以下操作:

第 1 步 - 在 Docker 外部运行 - 按预期工作

1) 创建一个简单的 ASP.NET Core 2.1 控制台应用程序:

using System;
using RabbitMQ.Client;

namespace DockerRabbitMQ
{
    class Program
    {
        static void Main(string[] args)
        {
            RabbitMQConnect();
        }

        public static void RabbitMQConnect()
        {
            var factory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "guest",
                Password = "guest"
            };

            var rabbit = factory.CreateConnection();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2)在本地PC上安装RabbitMQ并通过浏览到: http://localhost:15672来测试它的工作情况。我看到管理门户符合预期,因此它正在运行。

3) 运行控制台应用程序。它按预期运行并完成。

第 2 步 - 在 Docker 内运行

1) 右键单击​​控制台应用程序并选择:添加/容器编排支持。添加了 DOCKERFILE 和 docker-compose。

2) 将以下内容添加到 Docker Compose:

rabbit:
    image: rabbitmq:3-management-alpine
    hostname: rabbit
    ports:
      - "15672:15672"
      - "5672:5672"
Run Code Online (Sandbox Code Playgroud)

3) 停止本地 PC 上运行的 Rabbit MQ 服务(该服务是在步骤 1 第 2 部分中创建的)

4)将步骤1第1部分中的代码修改为:

HostName = "Rabbit",
Run Code Online (Sandbox Code Playgroud)

5) 在 Visual Studio 中运行 Docker Compose。这是错误:

在此输入图像描述

我相信我的问题与此类似:RabbitMq在 docker 中运行时拒绝连接。为什么我会提示这个错误?

更新

为了确保 RabbitMQ 在控制台应用程序之前启动;我将使用以下内容修改撰写文件:

depends_on:
      - rabbitmq
Run Code Online (Sandbox Code Playgroud)

更新2

我尝试按照上面的说明使用 MVC 应用程序而不是控制台应用程序(在步骤 1 中)。我将连接代码放入 Startup 构造函数中(仅用于测试),我看到了以下内容:

在此输入图像描述

为什么我会看到错误以及为什么它尝试连接到:92.242.132.15:5672?MVC 应用程序(和rabbit mw)之前的 Docker Compose 如下所示:

version: '3.4'

services:
  dockerrabbitmqmvc:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=44336
    ports:
      - "54258:80"
      - "44336:443"
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro

      rabbitmq:
        image: rabbitmq:3-management-alpine
        hostname: rabbit
        ports:
          - "15672:15672"
          - "5672:5672"
        expose:
          - "15672"
          - "5672"
Run Code Online (Sandbox Code Playgroud)

Mit*_*har 2

映射端口后,您必须在 docker compose 文件中将rabbitmq 的端口暴露给外部 - 如下所示

rabbit:
    image: rabbitmq:3-management-alpine
    hostname: rabbit
    ports:
      - "15672:15672"
      - "5672:5672"
    expose:
     - 15672
     - 5672
Run Code Online (Sandbox Code Playgroud)