У нас есть Spring Integration адаптер написанный в Spring XML конфигурации, как показано ниже. Он отлично работает во всех сценариях w.r.to обработки ошибок. Все дело в обработке ошибок - это записать сообщение об ошибке в очередь. Теперь нам нужно скрыть эту конфигурацию xml до DSL, мы изменили ее, используя приведенный ниже код.
Проблема:
Всякий раз, когда происходит ошибка внутри цепочки «inputChannel», мы хотели обработки ошибок, чтобы сделать некоторые проверки и записать ошибку на ошибку очереди и не повторите Payload. Spring XML делает именно то, что необходимо, но когда мы меняем его на DSL после размещения сообщения об ошибке в очереди ошибок, полезная нагрузка записывается обратно во входную очередь, и сообщение об ошибке из очереди исчезает, и это происходит в цикле, который никогда не заканчивается ,
Анализ мы сделали:
Там нет ошибки происходит после того, как сообщение об ошибке записывается в очередь и ошибок DSL адаптер конфигурации не имеет ничего как такового в процессе.
Любая помощь/направление для решения этого очень ценится.
Рабочей Spring XML адаптер:
<int-jms:message-driven-channel-adapter
channel="inputChannel" container="jmsContainer" extract-payload="true" />
<beans:bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<beans:property name="connectionFactory" ref="connectionFactory" />
<beans:property name="destinationName" value="Queue.test" />
<beans:property name="errorHandler" ref="errorHandler" />
</beans:bean>
Проблемные адаптер DSL:
private JmsMessageDrivenChannelAdapter MessageDrivenChannelAdapter(
String destinationName, String key) throws Exception {
JmsMessageDrivenChannelAdapter channelAdapter = Jms
.messageDriverChannelAdapter(connectionFactory)
.outputChannel(inputChannel)
.configureListenerContainer(
c -> c.errorHandler(errorHandler))
.destination(destinationName)
.setHeaderMapper(new HeaderMapper(getChannelHeaders(key)))
.get();
return channelAdapter;
}