运行docker-compose up命令时RabbitMQ客户端抛出错误

时间:2019-07-05 11:00:42

标签: docker asp.net-core docker-compose jackrabbit

我正在尝试使用两个依赖RabbitMQ的.net核心控制台应用程序运行docker-compose,我将Docker与Windows一起使用。

我已添加到控制台应用程序,如RabbitMQ官方文档https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

所述

在这两个应用程序之外,我还添加了docker-compose.yml

文件夹结构:

1.发送

  1. Send.cs(与RabbitMQ文档中的一样)
  2. Send.csproj
  3. Dockerfile

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2 as build-env
    WORKDIR /app
    
    # Copy the project file and restore the dependencies
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy the remaining source files and build the application
    COPY . ./
    RUN dotnet publish -c Release -o out
    
    # Build the runtime image
    FROM mcr.microsoft.com/dotnet/core/sdk:2.2
    WORKDIR /app
    COPY --from=build-env /app/out .
    ENTRYPOINT ["dotnet", "Send.dll"]
    

2.接收

  1. Recieve.cs(与RabbitMQ文档中的一样)

  2. Recieve.csproj

  3. Dockerfile(与发件人Dockerfile相同,除了Send被Recieve替换)

3。 Docker-compose.yml

  version: '3'

    services:
      rabbitmq:
        image: rabbitmq:3-management
        ports:
          - "5672:5672"
          - "15672:15672"
        container_name: rabbitmq
        hostname: my-rabbit
      Send:
        image: sender
        build:
          context: ./Send
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
      Reciever:
        image: reciever
        build:
          context: ./Recieve
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq

引发错误

  

未处理的异常:   RabbitMQ.Client.Exceptions.BrokerUnreachableException:无   指定的端点可达---> System.AggregateException:一个   或更多错误发生。 (连接失败)--->   RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败   ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException:   连接被拒绝127.0.0.1:5672

2 个答案:

答案 0 :(得分:2)

要使Docker容器能够相互通信,您需要将它们设置在同一网络中。在您的docker-compose.yml上添加以下内容:

version: '3'
    services:
      rabbitmq:
        image: rabbitmq:3-management
        ports:
          - "5672:5672"
          - "15672:15672"
        container_name: rabbitmq
        hostname: my-rabbit
        networks:
          - my-network-name
      Send:
        image: sender
        build:
          context: ./Send
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
        networks:
          - my-network-name
      Reciever:
        image: reciever
        build:
          context: ./Recieve
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
        networks:
          - my-network-name
networks:
  my-network-name:
    driver: bridge

如您所见,所有容器都在同一网络中,并且它们可以通过以下方式进行通信:

http://<container_name>:<port>

因此,如果您希望发件人 RabbitMQ 发送消息,则:

amqp://rabbitmq:5672

如果您将localhost用作任何容器中的IP,它将使用其回送接口来接收请求本身。

答案 1 :(得分:1)

维克多的回答也很有帮助,但是问题是,rabbitmq稍后启动,而发送和接收器之前启动。

虽然我重新启动了相同的已停止的发送方和接收方容器,但是它按预期方式工作(因为rabbitmq容器已启动)。 因此,我添加了从here找到的容器重试策略。

我的docker-compose文件的最终版本如下所示,并且工作正常。 版本:“ 3” 服务:

profilePicture