RabbitMQ broker不可达异常从一台机器间歇超时

本文关键字:一台 机器 超时 broker 异常 RabbitMQ | 更新日期: 2023-09-27 17:50:47

我们有11台运行IIS的windows web应用程序机器。这些发送消息到rabbitMQ服务器执行任务。我们使用rabbit来实现基本的工作队列功能。对于每个消息发布一个新连接并创建一个通道。就像在这里的教程- https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html

这在大多数情况下工作得很好,但在生产中,偶尔每天从不同的机器上运行一两次,我们开始在ConnectionFactory.CreateConnection上得到这个异常。

[BrokerUnreachableException: None of the specified endpoints were reachable]
RabbitMQ.Client.ConnectionFactory.CreateConnection():56
[TimeoutException: Connection to amqp://machinename.domain.net:5672 timed out]
    RabbitMQ.Client.Impl.SocketFrameHandler.Connect(TcpClient socket, AmqpTcpEndpoint endpoint, Int32 timeout):65
    RabbitMQ.Client.Impl.SocketFrameHandler..ctor(AmqpTcpEndpoint endpoint, Func2 socketFactory, Int32 timeout):52
    RabbitMQ.Client.Framing.Impl.ProtocolBase.CreateFrameHandler(AmqpTcpEndpoint endpoint, Func`2 socketFactory, Int32 timeout):8
    RabbitMQ.Client.ConnectionFactory.CreateConnection():45

导致消息丢失。我一直在研究每种机器设置的最大并发连接数,但没有任何进展。这也不符合我们的高峰流量。最有趣的线索是,它发生在突发事件中,当它发生时,它只发生在11台机器中的一台,一次向队列发布消息。

我正在使用rabbitmq。net客户端。

对于可能的原因有什么想法或提示吗?

RabbitMQ broker不可达异常从一台机器间歇超时

可能是某种数据包丢失?为什么不试试…抓…再试?

在命令窗口中执行ping RabbitServerHostName -t(其中RabbitServerHostName是您安装Rabbit的服务器),并在几天后查看您有多少数据包丢失。

由于所有的数据包丢失和网络不稳定问题,几乎总是建议重新尝试创建连接的方法。EasyNetQ库在这方面做得很好。然而,当你得到这个异常时,实现你自己的基于计时器的重试并不是很复杂,直到连接建立。