使用docker链接时拒绝连接RabbitMQ

时间:2017-06-28 12:34:43

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

我有一个微服务应用程序,它有两个服务,一个兔子mq用作消息队列,用于它们之间的通信。现在,我想在docker上部署它们。我在docker-compose.yml文件中有以下代码:

版本:“3” 服务:

  rabbitmq:
    build: ./Rabbit
    hostname: "rabbitmq"
    container_name: "rabbitmq"
    environment:
      RABBITMQ_ERLANG_COOKIE: "cookie"
      RABBITMQ_DEFAULT_USER: "user"
      RABBITMQ_DEFAULT_PASS: "pass"
      RABBITMQ_DEFAULT_VHOST: "/"
    ports:
      - "15672:15672"
      - "5672:5672"
    # labels:
    #   NAME: "rabbit1"
    volumes:
    - "/opt/rabbitmq:/var/lib/rabbitmq"

  service1:
    build: ./service1
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "8181:80"
    depends_on:
      - rabbitmq
    links:
     - rabbitmq
    networks:
      - webnet

所以,在这里,我在容器中构建RabbitMQ图像,然后将此容器链接到service1的容器。由于service1一个是ASP.NET核心Web API,我使用以下设置连接到消息队列:

//Establish the connection
            var factory = new ConnectionFactory
            {
                HostName = "rabbitmq",
                Port = 5672,
                UserName = "user",
                Password = "pass",
                VirtualHost = "/",
                AutomaticRecoveryEnabled = true,
                NetworkRecoveryInterval = TimeSpan.FromSeconds(15)
            };

但是当我尝试运行docker-compose up时,收到以下错误消息:

  

未处理的例外情况:   RabbitMQ.Client.Exceptions.BrokerUnreachableException:无   指定的端点是可达的--->   RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败   ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException:   没有这样的设备或地址

也许我在HostName中犯了一个错误,但我不确定如何纠正它。

1 个答案:

答案 0 :(得分:2)

有两个问题需要解决:

  1. 这两个服务不属于同一网络,因此您需要将rabbitmq服务添加到webnet网络或为这两个服务创建新网络

    < / LI>
  2. rabbitmq可能需要一些时间才能完全可用(即收听5672端口),因此您需要使service1服务等待{rabbitmq服务1}}服务;有关此问题,请参阅this question