Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 使用docker链接时拒绝连接到RabbitMQ_Asp.net Core_Rabbitmq_Docker Compose_Microservices - Fatal编程技术网

Asp.net core 使用docker链接时拒绝连接到RabbitMQ

Asp.net core 使用docker链接时拒绝连接到RabbitMQ,asp.net-core,rabbitmq,docker-compose,microservices,Asp.net Core,Rabbitmq,Docker Compose,Microservices,我有一个microservices应用程序,它有两个服务和一个rabbitmq,用作它们之间通信的消息队列。现在,我想在docker上部署它们。我在docker compose.yml文件中有以下代码: 版本:“3” 服务: rabbitmq: build: ./Rabbit hostname: "rabbitmq" container_name: "rabbitmq" environment: RABBITMQ_ERLANG_COOKIE: "c

我有一个microservices应用程序,它有两个服务和一个rabbitmq,用作它们之间通信的消息队列。现在,我想在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
one是一个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.BrokerRunReachableException:没有 指定的端点是可访问的---> RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败 --->System.Net.Internals.SocketException工厂+ExtendedSocketException: 没有这样的设备或地址


可能我的主机名有错误,但我不确定如何更正。

有两个问题需要解决:

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

  • rabbitmq
    可能需要一些时间才能完全可用(即收听
    5672
    端口),因此您需要使
    service1
    服务等待
    rabbitmq
    服务;关于这个问题,请参见


  • 他们不在同一个网络上,将
    网络:-webnet
    放到
    rabbitmq
    服务,或者为他们两个创建另一个网络我尝试了这个,但仍然不起作用,但异常是以下
    未处理的异常:RabbitMQ.Client.Exceptions.BrokerRunReachableException:指定的终结点均不可访问---->RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败---->System.Net.Internals.SocketExceptionFactory+ExtendedSocketException:连接被拒绝172.21.0.3:5672
    我们正在取得进展,至少主机名现在已解决。请重新启动docker并重试。看来执行顺序是问题所在。我认为这篇文章是一个可能的解决方案。