RabbitMQ Brokerunreachable异常超时从机器间歇性地超时

时间:2015-05-26 23:21:42

标签: c# asp.net .net asp.net-mvc rabbitmq

我们有11个运行IIS的Windows webapp机器。这些消息发送到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 dot net client。

关于可能原因的任何想法或指示?

2 个答案:

答案 0 :(得分:0)

可能是某种丢包?为什么不试试...... Catch..Retry?

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

答案 1 :(得分:0)

由于所有数据包丢失和网络不稳定性问题,几乎总是建议重试连接创建的方法。 EasyNetQ库做得非常好。但是,在建立连接之前获得此异常时,实现自己的基于计时器的重试并不是非常复杂。