背景:
我们有一个用 Spring XML 配置编写的 Spring Integration 适配器,如下所示。它在错误处理的所有场景中都能完美运行。错误处理所做的所有事情就是将错误消息写入队列。现在我们需要将此 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;
}