rabbitmq Rabbit MQ空闲连接已断开

llew8vvj  于 2022-11-23  发布在  RabbitMQ
关注(0)|答案(1)|浏览(440)

我有一个作为使用者/订阅者运行的.NET Windows服务,该服务正在侦听消息队列。
windows服务与rabbit mq server s/w在同一台机器上运行。
如果队列空闲60分钟,则会导致其连接被丢弃(我在监视UI Jmeter 板时知道这一点),并使Windows服务处于不良状态。
事实证明,这是令人沮丧的解决。我已经在Rabbit 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服务器日志文件设置:【{兔子,【{心跳,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秒&
请求连接超时设置为2秒
我不知道在配置方面还缺少什么?
运行上述操作系统的服务器是Windows 2012 R2
基本上,我希望看到连接始终保持在适当的位置,无论空闲时间。
是否有Windows操作系统级别的TCP保持活动设置需要确保也已到位?
Rabbit MQ版本为3.6.8

xam8gpfp

xam8gpfp1#

我成功地阻止了RabbitMQ服务器上的空闲连接断开(60分钟后),方法是应用本文中引用的重新连接逻辑。
注意:答案被更新为最新版本的RabbitMQ客户端启用了自动连接恢复,因此不需要手动重新连接逻辑。在我的案例中,这不是真的,因为我已经应用了这些设置,但我仍然看到连接在60分钟空闲时间后断开。在我的场景中,客户端和服务器在同一台机器上。
如果有人知道60分钟的空闲时间设置是从哪里来的,我将不胜感激,我扫描了所有的rabbitmq配置设置,并没有找到任何相关的。

相关问题