2015-10-07 2 views
0

У меня есть класс 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(); 
    } 
} 

ответ

0

Для того, чтобы сохранить порядок (секвенирование), вы должны откатить сообщение, если есть какие-либо исключения из-за провайдера JMS (MQ-сервер) сбоев ,

Также, пожалуйста, найти способ() ниже текст из оракула док на GetText:

метод

TextMessage GetText() Броски:

JMSException - если провайдер JMS не может получить текст из-за некоторая внутренняя ошибка

Смежные вопросы