Как выполнить ручную фиксацию с помощью SpringMessageListenerContainer? - PullRequest
1 голос
/ 07 апреля 2011

У нас есть приложение, которое прослушивает в очереди сообщения, и я знаю, что dmlc предоставляет свойство sessionTransacted, которое, как я предполагаю, позволит нам вручную зафиксировать событие получения сообщения, однако я не уверен, как использовать его в Слушателе. ,

Похоже, что просто с помощью исключения RuntimeException сообщение помещается обратно в очередь и входит в цикл, если ErrorHandler не был установлен, но мы хотели бы специально зафиксировать получение.

, например

public class JMSMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
       // do something with the message and then manually commit
    }
}

1 Ответ

2 голосов
/ 08 апреля 2011

А есть опыт работы с ActiveMQ. Когда sessionTransacted включен, и если ваше приложение неожиданно завершает работу в onMessage, сообщение будет обработано снова после перезапуска. Если сеанс не будет обработан, он будет потерян.

Вы не можете вручную управлять транзакцией (за исключением выдачи исключения для отката сообщения), используя sessionTransacted. Возможно, вы захотите взглянуть на SessionAwareMessageListener , хотя я никогда не пробовал.

...