【问题标题】:RabbitMQ: None of the specified endpoints were reachableRabbitMQ:没有一个指定的端点是可达的
【发布时间】:2015-10-04 00:23:14
【问题描述】:

我的 rabbitmq 应用程序在 windows 2012 服务器上运行,我随机使用此错误。

Exception Type: RabbitMQ.Client.Exceptions.BrokerUnreachableException



None of the specified endpoints were reachable

   at RabbitMQ.Client.ConnectionFactory.CreateConnection()

   at Program.Main(String[] args)

Stream does not support writing.

   at System.IO.BufferedStream.EnsureCanWrite()

   at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)

   at RabbitMQ.Client.Impl.SocketFrameHandler.SendHeader()

   at RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()

   at RabbitMQ.Client.Framing.Impl.Connection.Open(Boolean insist)

   at RabbitMQ.Client.Framing.Impl.Connection..ctor(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)

   at RabbitMQ.Client.Framing.Impl.ProtocolBase.CreateConnection(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)

   at RabbitMQ.Client.ConnectionFactory.CreateConnection()

可能是什么原因导致随机连接失败,并自动开始连接。

谁能帮帮我。

【问题讨论】:

  • 您的网络有多稳定?
  • @YuvalItzchakov 是 AWS 服务器,它似乎一直都在运行。
  • 我有同样的问题。像 Skype 这样的事情影响了 RabbitMQ,不知道为什么。另外有时我必须停止 RabbitMQ 服务,稍等片刻再启动(如果我重新启动它就不起作用)真的很烦人不知道问题是什么!

标签: c# rabbitmq windows-server-2012


【解决方案1】:

我遇到了这个问题,最后我可以通过添加 ConnectionFactory 类的“Ssl”属性并指定“ServerName”子属性来解决它。

这就是我所做的,它连接到 Rabbit MQ 服务器。 请注意以下代码中的“ServerName”部分:

var rabbitMqConnectionFactory
    = new ConnectionFactory
        {
            HostName = rabbitMqHostName,
            Port = rabbitMqPort,
            UserName = rabbitMqUserName,
            Password = rabbitMqPassword,
            VirtualHost = rabbitMqVirtualHost,
            RequestedHeartbeat = 60,
            Ssl =
                {
                    **ServerName** = rabbitMqHostName,
                    Enabled = useSsl
                }
        };

【讨论】:

    【解决方案2】:

    很难说到底是什么问题,但导致出现此类问题的原因之一是 RabbitMQ 心跳,您可以更改此值。有关更多信息,您可以查看此链接Detecting Dead TCP Connections with Heartbeats

    ConnectionFactory cf = new ConnectionFactory();
    
    // set the heartbeat timeout to 60 seconds
    cf.setRequestedHeartbeat(60);
    

    【讨论】:

    • @Jay 还是同样的问题?
    【解决方案3】:

    似乎有几种情况会出现“指定的端点都无法到达”错误。

    当 RabbitMQ 服务未运行,或者 RabbitMQ 服务正在运行但处于错误状态时,以及客户端无法连接时,我都看到了这一点。用户无权访问它尝试连接的虚拟主机。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,我通过使用 docker compose 创建新的 RabbitMQ Docker 容器解决了这个问题:

       rabbitmq:
          container_name: rabbitmq
          tty: true
          hostname: rabbitmq
          ports:
            - "15672:15672"
            - "5672:5672"
          image: rabbitmq:3-management
          environment:
            - RABBITMQ_DEFAULT_USER=user
            - RABBITMQ_DEFAULT_PASS=password
      

      为了通过代码访问它,我必须在 appsettings.json 文件中将主机设置为我的本地主机 IP 地址:

      "RabbitMqSend": {
      "Hostname": "192.168.0.12",
      "QueueName": "SendQueue",
      "UserName": "user",
      "Password": "password"},
      

      有了它,它对我有用。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。在我的情况下,端口 5672 已关闭。 为了找出问题所在,我在代码中激活了 InnerException。

        【讨论】:

          【解决方案6】:

          这里重要的是:哪个操作系统使用客户端? 它运行的是 Windows XP/7 吗?

          它可能已达到并发 TCP 连接的限制。

          这里is a link about 如何在 Windows 7 上增加该限制。

          我在使用运行 Win7 的 .NET RabbitMQ 客户端进行压力测试时遇到了同样的问题。

          【讨论】:

            猜你喜欢
            • 2019-05-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-09
            • 2018-05-31
            • 2015-12-02
            • 1970-01-01
            相关资源
            最近更新 更多