我在使用Azure上的PUBSUB時遇到問題。爲什麼使用PUBSUB訂閱時不能PING?
Azure防火牆將關閉空閒任意時間長度的連接。時間的長短正在爭論不休,但人們認爲它大約在5至15分鐘之間。
我使用Redis作爲消息隊列。要做到這一點ServiceStack.Redis庫提供了預訂以下信道RedisMqServer:
mq:topic:in
在後臺線程它從插座接收的數據塊,等待從Redis的接收消息。問題是:
如果等待Redis消息的套接字在任何時間段內都空閒,Azure防火牆 將以無提示方式關閉連接。我的應用程序不知道,因爲它現在正在等待一個關閉的連接(關於它的 打開)。後臺線程被有效掛起。
我原以爲實現某種活着的保持這將是等待一分鐘的消息,但如果沒有接收ping服務器有兩個目標:
- 保持通過告訴Azure這個連接打開連接是 仍在使用中。
- 檢查連接是否已關閉,如果是這樣, 重新開始並重新訂閱。
但是,當我實現這個,我發現我不能使用PING命令,而訂閱?不知道這是爲什麼,但有沒有人有一個替代解決方案?
我不想取消訂閱和定期重新訂閱,因爲我可能會錯過消息。
我已閱讀以下文章:http://blogs.msdn.com/b/cie/archive/2014/02/14/connection-timeout-for-windows-azure-cloud-service-roles-web-worker.aspx,其中討論了Azure負載平衡器在4分鐘後如何斷開連接。但即使我可以保持連接活着,但仍需要實現重新啓動訂閱的第二個目標,如果連接因其他原因而死亡(redis節點停止)。
棒極了!我將在PUBSUB期間將此能力添加到PING Redis客戶端,作爲ServiceStack.Redis的保持活動能力。我使用的是Azure託管的Redis作爲我的服務器,因此我無法控制它們的版本,但我會保持注意並儘快使用它。非常感謝! – James