場景:使用redis的pubsub的功能實作訂閱多個netty服務端發送的訊息(有兩種情況websocket->redis->netty 和 netty->redis->websocket),然后頁面上通過websocket更新相關的資料。
問題:專案剛開始運行是沒問題的,但是過了一段時間之后。netty端沒辦法訂閱到websocket發出的訊息。
網上的說法:
(1)config set client-output-buffer-limit pubsub 0 0 0 , 這樣設定之后就不限制訊息快取的大小,但是我覺得這種不是很合理,官方也不推薦這種方案。 https://blog.csdn.net/luyaoying001/article/details/80264347
(2)https://tcspecial.iteye.com/blog/2316033
我的現象和這篇文章說的很類似,但是他最后給的方案,我還不知道是什么樣的原理 ?

那位朋友遇到類似的問題,幫忙提供下思路,非常感謝

uj5u.com熱心網友回復:
我也遇到了,沒辦法,只能通過定時器每30秒呼叫一下redis.convertAndSend方法才能保證不斷線,感覺比較sbuj5u.com熱心網友回復:
tcp-keepalive這個配置影響的,這個配置默認是0 官方建議值為60 單位是秒,此配置的作用是檢查健康的連接的時間,可以理解為心跳機制
如果設定為0則不會檢查心跳資訊,就會造成連接實際已經斷開了。但是客戶端不知道,也不會拋例外,還在哪傻傻的blpop。
將 tcp-keepalive 60即可解決這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108884.html
標籤:Java EE
