У меня есть класс Spring JMS Consumer, который читает сообщения с очереди (реализует SessionAwareMessageListener) и обрабатывает их для отправки в веб-службу. Нам нужно сохранить порядок, в котором сообщения поступают и обрабатываются, поскольку они содержат инкрементные обновления для одних и тех же данных.Заказ сообщений ActiveMQ - Откат сеанса для JMSException?
Для обеспечения этого мы откатываем сеанс в слушателе в случае любого восстановимого сбоя, такого как тайм-аут службы, поэтому повторное повторение одного и того же сообщения. Однако, если сообщение имеет недопустимый формат или содержит плохие данные, оно отбрасывается (сеанс не откат).
В случае исключения JMSException, которое вызывается методом message.getText(), я не понимаю, нужно ли откатывать сеанс или нет. Может ли это считаться восстановимой ошибкой или если сообщение будет отброшено в случае возникновения этой ошибки?
код выглядит примерно так:
public void onMessage(Message message, Session session) throws JMSException {
try {
String msgText = ((TextMessage) message).getText();
// Processing occurs
// Web service is called
} catch (JMSException jmse) {
// log error
session.rollback(); // Question about this line
} catch (InvalidMessageException ime) {
// log error
// session is NOT rolled back, proceed to next message
} catch (SocketTimeoutException | AnyOtherRecoverableException excp) {
// log error
session.rollback();
}
}