我们有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。
关于可能原因的任何想法或指示?
答案 0 :(得分:0)
可能是某种丢包?为什么不试试...... Catch..Retry?
在命令窗口中执行ping RabbitServerHostName -t
(其中RabbitServerHostName是安装了Rabbit的服务器),并在几天后查看您有多少数据包丢失。
答案 1 :(得分:0)
由于所有数据包丢失和网络不稳定性问题,几乎总是建议重试连接创建的方法。 EasyNetQ库做得非常好。但是,在建立连接之前获得此异常时,实现自己的基于计时器的重试并不是非常复杂。