Apache NMS с использованием ActiveMQ: как использовать режим подтверждения транзакций, но при этом каждый раз подтверждать / откатывать одно сообщение? - PullRequest
0 голосов
/ 25 февраля 2019

Я использую Apache NMS (в c #) для получения сообщений от ActiveMQ.Я хочу быть в состоянии подтвердить каждое полученное сообщение или откатить сообщение в случае ошибки.

Я решил первую часть, используя CreateSession (AcknowledgementMode.IndividualAcknowledge), а затем для каждого полученногоmessage Я использую message.Acknowledge ().

Проблема в том, что в этом режиме нет опции отката.если сообщение не подтверждено - я никогда не смогу получить его снова для другого испытания.Его можно отправить только другому потребителю, но другого потребителя нет, поэтому он просто застрял в очереди.

Поэтому я попытался использовать AcknowledgementMode.Transactional, но здесь есть еще одна проблема: я могу толькоиспользуйте session.Commit () или session.Rollback (), но нет способа узнать, какое конкретное сообщение я фиксирую или выполняю роль.

Как правильно это сделать?

1 Ответ

0 голосов
/ 05 марта 2019

Оставайтесь с INDIVIDUAL_ACKNOWLEDGE, а затем попробуйте session.recover () и session.close ().Оба из них должны сигнализировать брокеру, что сообщения не будут подтверждены.

...