![](/img/trans.png)
[英]Spring boot JMS DefaultListenerContainer occasionally drops connection and not autorevocered with Tibco EMS
[英]Spring JMS Consumers to a TIBCO EMS Server expire on their own
我們已經構建了一個Spring Boot消息服務,該服務偵聽TIBCO EMS(企業消息服務)服務器上托管的JMS隊列。 這是一個相當簡單的應用程序,它接收JMS消息,進行一些數據操作並更新數據庫。
問題在於,有時隊列中沒有JMS使用者,並且未處理傳入消息。 但是,Spring Boot應用程序已啟動並正在運行(已通過ps -ef驗證)。 重新啟動該應用程序可恢復使用者,但不幸的是,這在生產等方面不是可行的解決方案。
其他有趣的事實:
實例化DefaultJmsListenerContainerFactory的代碼段:
@Bean
public DefaultJmsListenerContainerFactory listenerJmsContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
TibjmsQueueConnectionFactory cf = new TibjmsQueueConnectionFactory("tcp://localhost:7222");
cf.setUserName("admin");
cf.setUserPassword("");
factory.setConnectionFactory(cf);
return factory;
}
JMS偵聽器:
@JmsListener(destination = "queue.sample", containerFactory = "listenerJmsContainerFactory")
public void listen(TextMessage message, Session session) throws JMSException{
System.out.println("Received Message: "+message.getJMSMessageID());
System.out.println("Acknowledgement Mode: "+session.getAcknowledgeMode());
// Some more application specific stuff
}
當我們嘗試在Spring Boot和TIBCO端都設置其他日志記錄時,我們想檢查一些點,例如:
感謝您的投入,Prabal
最有可能的是,網絡中的某些東西(路由器,防火牆等)正在默默地丟棄空閑連接。
盡管不是JMS規范的一部分,但大多數供應商都實現了某種心跳機制,以便客戶端/服務器不時交換ping,以防止網絡組件采取此類操作和/或檢測此類情況。
查看Tibco文檔,了解如何配置心跳(他們可能將其稱為其他信號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.