我有一个作为消费者/订阅者运行的.NET Windows服务,它正在侦听消息的队列。
Windows服务与安装Rabbit mq server s / w的机器上运行。
队列如果空闲60分钟导致连接被丢弃(我知道这是我监视UI仪表板)并将Windows服务置于错误状态。
这被证明是令人沮丧的解决方案。 我已经在兔子mq客户端上应用了心跳设置,但这没有效果。
以下错误是我在连接断开时在日志文件中获得的错误
=ERROR REPORT==== 22-Aug-2017::12:20:29 ===
closing AMQP connection <0.1186.0> ([FE80::C00E:F801:A2A7:8530]:61481 ->
[FE80::C00E:F801:A2A7:8530]:5672):
missed heartbeats from client, timeout: 30s
Rbbit mq服务器日志文件设置: [{rabbit,[{heartbeat,60}]}]。
客户代码:
var connectionFactory = new ConnectionFactory
{
HostName = hostName,
UserName = userName,
Password = password,
RequestedHeartbeat = heartBeat,
AutomaticRecoveryEnabled = true,
NetworkRecoveryInterval = TimeSpan.FromSeconds(numberOfSecondsInterval),
RequestedConnectionTimeout = RequestedConnectionTimeoutInMiliseconds
};
if (port > 0)
connectionFactory.Port = port;
var connection = connectionFactory.CreateConnection();
var model = connection.CreateModel();
model.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
return new Tuple<IConnection, IModel>(connection, model);
上面的心跳值设置为30秒,
网络恢复值设置为10秒&amp;
请求连接超时设置为2秒
我不知道我在配置方面还缺少什么?
运行上述服务器的服务器是Windows 2012 R2
基本上,我希望无论空闲时间如何,都能看到连接始终存在。
是否存在Windows操作系统级别的TCP保持活动设置,我还需要确保它已就位?
Rabbit MQ版本是3.6.8
在这个上撕开我的头发,所以任何指针都非常赞赏
答案 0 :(得分:0)
我成功地通过应用this SO post中引用的重新连接逻辑,成功地阻止空闲连接在RabbitMQ服务器上丢弃(60分钟后)。
注意:答案已更新,表明最新版本的RabbitMQ客户端已启用自动连接恢复,因此不需要手动重新连接逻辑。在我的情况下这不是真的,因为我已经应用了这些设置,但我仍然看到在空闲时间60分钟后连接丢失。我的方案中的客户端和服务器位于同一台计算机上。
如果有人知道60分钟的空闲时间设置来自哪里,我将不胜感激,我扫描了所有的rabbitmq配置设置,但找不到与之相关的任何内容。