2017-06-28 41 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