Подтверждение весеннего сообщения - PullRequest
0 голосов
/ 22 ноября 2018

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

<jms:message-driven-channel-adapter id="messageAdapter" destination="inQueue"
                                    connection-factory="connectionFactory"
                                    error-channel="errorChannel"
                                    concurrent-consumers="${consumer.concurrent-consumers}"
                                    acknowledge="transacted"
                                    transaction-manager="transactionManager"
                                    channel="channel"
                                    auto-startup="true"
                                    receive-timeout="50000"/>

Так что это сообщение отправляется на мой основной канал, а затем проходит через серию активаторов службы.В промежутке между ошибками, если это сообщение перемещается в errorChannel, где я обрабатываю ошибки и решаю, что делать с этим сообщением.Для одного сценария я хочу, чтобы сообщение не откатывалось в очередь, возможно ли это?Я использую «transacted» в своем определении адаптера, поэтому я не уверен, как управлять этим поведением.Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 23 ноября 2018

Вы не описываете, что такое бин transactionManager.Если это JmsTransactionManager, удалите его, и контейнер будет просто использовать локальные транзакции.

Тогда транзакция будет откатываться только в том случае, если поток на error-channel выдает исключение.Если этот поток ошибок завершается нормально («поглощая» ошибку), транзакция не будет откатываться.

Если это какой-то другой менеджер транзакций (например, JDBC), удалите его и запустите транзакцию JDBC позже в потоке (т.е. не синхронизируйте транзакции JMS и JDBC, опять же используя локальную транзакцию JMS.

...