Rabbit MQ空闲连接丢失了

时间:2017-08-22 14:43:07

标签: c# rabbitmq windows2012 heartbeat tcp-keepalive

我有一个作为消费者/订阅者运行的.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

在这个上撕开我的头发,所以任何指针都非常赞赏

1 个答案:

答案 0 :(得分:0)

我成功地通过应用this SO post中引用的重新连接逻辑,成功地阻止空闲连接在RabbitMQ服务器上丢弃(60分钟后)。

注意:答案已更新,表明最新版本的RabbitMQ客户端已启用自动连接恢复,因此不需要手动重新连接逻辑。在我的情况下这不是真的,因为我已经应用了这些设置,但我仍然看到在空闲时间60分钟后连接丢失。我的方案中的客户端和服务器位于同一台计算机上。

如果有人知道60分钟的空闲时间设置来自哪里,我将不胜感激,我扫描了所有的rabbitmq配置设置,但找不到与之相关的任何内容。

相关问题