2
我使用Spring DefaultMessageListenerContainer和JMS Message Listener來使用來自Solace隊列的消息。客戶確認設置爲true。Solace會話恢復,消息傳遞
如果異常消息保留在隊列中,因爲它們沒有被確認,並且這些消息沒有被重新發送。處理異常後抽取的新消息。
已閱讀使用session.recover,但我們如何處理會話。還嘗試將maxredelivery設置爲3。但不工作。
public void onMessage(Message message) {
String text = null;
ALNTLogger.trace(CLAZZ_NAME, "onMessage()", "Message Received:");
try {
TextMessage textMessage = (TextMessage) message;
text = textMessage.getText();
ALNTLogger.trace(CLAZZ_NAME, "onMessage()", "Message Received: " + text);
Document xmlDocument = parseXml(text);
Map < String, String > values = getValues(xmlDocument);
saveValues(values);
message.acknowledge();
} catch (Exception ex) {
ALNTLogger.error(CLAZZ_NAME, "onMessage()", "Failed to process message:" + text);
throw new RuntimeException(ex);
}
}
所以這意味着當使用'MessageListenerContainer'時,唯一有用的會話模式是事務性的,除非應用程序有時不關心丟失消息。更糟的是,它是默認的('AUTO_ACKNOWLEDGE'),如果你有一個異常,那麼這些消息就會丟失......我不知道有多少應用程序在那裏執行。 – ddekany
從那以後,'AbstractMessageListenerContainer' JavaDocs得到了改進,所以例如對於'CLIENT_ACKNOWLEDGE',它說「在引發用戶異常的情況下盡最大努力重新傳遞」。爲什麼這只是盡力而爲... – ddekany