簡體   English   中英

Rabbit MQ空閑連接已刪除

[英]Rabbit MQ idle connection dropped

我有一個作為使用者/訂戶運行的.NET Windows服務,正在偵聽消息隊列。

Windows服務與安裝Rabbit mq服務器的軟件在同一台計算機上運行。

如果隊列空閑60分鍾,則會導致該連接被丟棄(我在監視UI儀表板時就知道了),並將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服務器日志文件設置:[{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秒&

請求連接超時設置為2秒

我不知道在配置方面我還缺少什么?

上面運行的服務器是Windows 2012 R2

基本上,我期望無論空閑時間如何,連接始終保持在原位。

我是否需要確保還安裝了Windows操作系統級別的TCP保持活動設置?

Rabbit MQ版本是3.6.8

把我的頭發扯掉,所以任何指針都非常感謝

通過應用此SO post中引用的重新連接邏輯,我設法成功阻止了RabbitMQ服務器上的空閑連接斷開(60分鍾后)

注意:答案已更新為最新版本的RabbitMQ客戶端已啟用自動連接恢復,因此不需要手動重新連接邏輯。 在我的情況下,這不是正確的,因為我已經應用了這些設置,但是在60分鍾的空閑時間后,我仍然看到連接斷開。 我的方案中的客戶端和服務器位於同一台計算機上。

如果有人偶然知道60分鍾空閑時間設置來自何處,我將不勝感激,我掃描了所有Rabbitmq配置設置,但未找到任何與之相關的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM