从Docker容器中使用RabbitMQ

时间:2018-10-28 08:36:24

标签: c# docker rabbitmq

我正在尝试将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();
        }
    }
}

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"

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

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

HostName = "Rabbit",

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

enter image description here

我相信我的问题类似于以下问题:RabbitMq refuses connection when run in docker。为什么会提示我这个错误?

更新

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

depends_on:
      - rabbitmq

更新2

我已尝试使用MVC应用程序而不是控制台应用程序按照上述说明进行操作(在步骤1中)。我将连接代码放在Startup构造函数中(仅用于测试),看到的是:

enter image description here

为什么我看到错误,为什么它试图连接到:92.242.132.15:5672? Docker Compose使MVC应用程序(和Rabbit Mw)看起来像这样:

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"

1 个答案:

答案 0 :(得分:0)

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

rabbit:
    image: rabbitmq:3-management-alpine
    hostname: rabbit
    ports:
      - "15672:15672"
      - "5672:5672"
    expose:
     - 15672
     - 5672