2017-06-28 43 views
2

我有一个微服务应用程序,它有两个服务和一个用作消息队列的rabbit mq用于它们之间的通信。现在,我想将它们部署在docker上。我在docker-compose.yml文件下面的代码:当使用docker链接时拒绝连接到RabbitMQ

版本:“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 + ExtendedSocketEx ception: 没有这样的设备或地址

也许我在HostName一个错误,但我不知道如何纠正它。

+0

他们并不在同一个网络上,把'网络: - webnet'为'rabbitmq'服务,或创建另一个网络只是他们两个 –

+0

的这个我试过,但它仍然没有工作,但异常是以下'''未处理的异常:RabbitMQ.Client.Exceptions.BrokerUnreachableException:没有指定的端点可达---> RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException:连接被拒绝172.21.0.3:5672''' – StefanL19

+0

我们正在某个地方,至少现在已经解决了主机名。 –

回答

2

有一些需要加以修正两个问题:

  1. ,所以你需要将rabbitmq服务添加到webnet网络或创建了一个新的网络的两个服务不属于同一网络两个服务

  2. rabbitmq可能需要一些时间才能完全可用(即听5672端口),所以你需要做的service1服务等待rabbitmq服务;有关此问题,请参阅this question