簡體   English   中英

重新連接后Solace JMS Consumer停止

[英]Solace JMS Consumer stopped after reconnect

我在我的項目中使用solace作為JMS提供程序。 我使用spring CachingConnectionFactory來檢索Connection。 在該連接上,我創建了新會話。 我在該會話上創建了一個具有消費者的線程。

@Autowired
CachingConnectionFactory ccf;
Connection connection = ccf.createConnection();
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
MessageConsumer messageConsumer = new session.createConsumer(destination); // This is passed to new thread

我正在做一些故障轉移測試。 當我從網絡連接中拔出服務器時,它會失敗。 當我再次連接服務器時,我仍然收到相同的異常:

javax.jms.IllegalStateException: Error receiving message - already closed (Tried to call receive on a stopped message consumer.) ...

更重要的是,CachingConnectionFactory的“ reconnectOnException”屬性默認情況下設置為“ true”(我檢查是否可行)。

異常似乎很明顯。 所以我的問題是:當連接丟失並重新建立后,如何處理這種情況/異常? 是否有可能使消費者再次存活? 還是我應該創建新的使用者和新線程(我想避免什么)?

收到異常后,reconnectOnException屬性將嘗試進行一次重新連接。 由於故障轉移仍在進行中,此重新連接很可能失敗。

您可以使用JNDI連接工廠中的“重新連接重試”和“重新連接重試等待”屬性,配置Solace API嘗試多次重新連接。 這可以通過SolAdmin或CLI在Solace路由器上配置。 如果將應用程序配置為重新連接足夠長的時間以建立連接,則不應遇到任何異常。 否則,在收到此異常時,您將需要再次創建會話和使用者。

通常, CachingConnectionFactory可以通過Connection的onException()支持自動重新連接。 但是,一旦重新連接,您還應該重新創建您使用的使用者。

您可以引用/使用spring的DefaultMessageListenerContainerSimpleMessageListenerContainer ,例如SimpleMessageListenerContainer

在此處輸入圖片說明

暫無
暫無

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

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