Я использую Spring DefaultMessageListenerContainer и JMS Message Listener для использования сообщений из Solace Queue. Подтверждение клиента установлено на true.Solace Session Recovery, сообщение redelivery
В случае сообщений об исключении остаются в очереди, так как они не были подтверждены, и они не были повторно отправлены. Обработаны новые сообщения, которые были отправлены после исключения.
Прочитали об использовании 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
С тех пор были улучшены JavaDocs «AbstractMessageListenerContainer», поэтому, например, для 'CLIENT_ACKNOWLEDGE' он говорит« перепродажа с наилучшими усилиями в случае вызванного исключения пользователя ». Почему это просто лучшее усилие, хотя ... – ddekany