RabbitMQ:指定的端点均无法访问

问题描述 投票:0回答:7

我的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()

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

任何人都可以帮我解决这个问题吗?

c# rabbitmq windows-server-2012
7个回答
10
投票

我遇到了这个问题,最后我可以通过添加 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
                }
        };

5
投票

我遇到了同样的问题,我通过使用 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"},

这个对我有用。


3
投票

很难说到底是什么问题,但导致出现此类问题的原因之一是 RabbitMQ 心跳,您可以更改此值。有关更多信息,您可以查看此链接通过心跳检测死 TCP 连接

ConnectionFactory cf = new ConnectionFactory();

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

3
投票

似乎在多种情况下您可能会收到“没有可以到达的指定端点”错误。

当 RabbitMQ 服务未运行或 RabbitMQ 服务正在运行但处于错误状态时,以及当客户端无法连接时(例如)时,我都看到过这种情况。用户无权访问其尝试连接的虚拟主机。


1
投票

我也有同样的问题。就我而言,端口 5672 已关闭。 为了找到问题所在,我在代码中激活了 InnerException。


0
投票

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

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

这里是一个关于如何增加 Windows 7 上的限制的链接。

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


0
投票

我重新启动了powershell并再次从RabbitMQ文档中写入 “docker run -it --rm --namerabbitmq -p 5672:5672 -p 15672:15672rabbitmq:3.12-管理”

来自文档 https://www.rabbitmq.com/download.html

并且赚到了。我确信它只需要完全配置,这样它就不会每次都这样做

© www.soinside.com 2019 - 2024. All rights reserved.