[英]Tibco untraceable deconnection
在我們的生產環境中,我們面臨着一個關於 Tibco 和 Spring JMS 的奇怪問題。 盡管隊列中有消息,但隨機在一周內我們的 Spring JMS(Spring Boot 2.5.2)的MessageListener
實現不再從服務器接收消息。 但是,沒有報告客戶端斷開連接錯誤,因此偵聽器仍在偵聽。
你有好主意嗎? Spring JMS 是否具有“自動重連”機制,無需服務器顯式斷開連接? 或其他解決問題的想法? 我們還使用 com.tibco.tibjms tibjms 8.0.0 jar 和 tibco-ems tibcrypt 4.1 jar。
非常感謝,阿德里安
您是否在receiveTimeout
上設置了org.apache.camel.component.jms.JmsComponent
? 此超時指定消息偵聽器等待接收消息的時間。 如果此超時到期,則消息偵聽器將被刪除並重新建立。
默認值為 1 秒,這通常非常低,因為當目的地沒有消息時,這會導致頻繁的連接斷開和重新連接。
對此行為的一個可能解釋是在 EMS 客戶端庫中檢測不到的網絡級別連接丟失。
要管理它,您需要做兩件事:
#1 在 EMS 服務器級別,在 tibemsd.conf 文件中添加以下屬性:
client_heartbeat_server = 20
server_timeout_client_connection = 90
server_heartbeat_client = 20
client_timeout_server_connection = 90
這些屬性啟用了一些 EMS 機制,允許檢測 EMS 服務器和客戶端應用程序之間的連接丟失。
#2 在您的應用程序級別,您應該在 JVM 參數中添加以下屬性:
-Dcom.tibco.tibjms.connect.attempts 6, 10000 -Dcom.tibco.tibjms.reconnect.attempts 12, 10000
此外,如果您正在使用連接工廠,則應將以下屬性添加到應用程序使用的每個工廠:
addprop factory <YourFactory> url=tcp://<YourServer1>:7222,tcp://<YourServer2>:7222
addprop factory <YourFactory> connect_attempt_count=6
addprop factory <YourFactory> connect_attempt_delay=10000
addprop factory <YourFactory> connect_attempt_timeout=1000
addprop factory <YourFactory> reconnect_attempt_count=12
addprop factory <YourFactory> reconnect_attempt_delay=10000
addprop factory <YourFactory> reconnect_attempt_timeout=1000
這些屬性控制 EMS 客戶端庫中可用的重新連接機制。
通過以上內容,您應該能夠檢測到連接丟失並自動重新連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.