Spring integration 错误通道未在不同步骤中填充
我知道这是一个经常被问到的问题,但我的问题似乎有点不同 简短介绍:Spring integration 错误通道未在不同步骤中填充,spring-integration,Spring Integration,我知道这是一个经常被问到的问题,但我的问题似乎有点不同 简短介绍: 我有一个针对队列轮询的DMLC。 之后,消息通过DirectChannel发送到链。在链中,我使用解组转换器(将传入的xml转换为接口对象)。 然后再次执行不同的步骤(验证等,全部通过DirectChannel),在流程的末尾,我希望将(转换的)消息插入到数据库中 在下面的流程中有不同的“错误源”。例如,输入消息不正确,无法转换(解组)为对象。或者数据库无法插入记录 现在,关于不同错误类型的问题: 如果无法转换输入消息或数据验证
我有一个针对队列轮询的DMLC。
之后,消息通过DirectChannel发送到链。
在链中,我使用解组转换器(将传入的xml转换为接口对象)。 然后再次执行不同的步骤(验证等,全部通过DirectChannel),在流程的末尾,我希望将(转换的)消息插入到数据库中 在下面的流程中有不同的“错误源”。例如,输入消息不正确,无法转换(解组)为对象。或者数据库无法插入记录 现在,关于不同错误类型的问题:
如果无法转换输入消息或数据验证产生错误,我想向错误通道发送错误消息(或异常),因为回滚消息没有意义。
如果数据库插入失败(可能是由于“系统挂起”),我希望将消息回滚到输入队列(peInputQueue)。
从配置xml中包含一个snipplet:
<jms:message-driven-channel-adapter id="peMessageDrivenAdapter"
channel="jmsHeaderEnricherChannel"
acknowledge="transacted"
connection-factory="jmsTransactionConnectionFactory"
concurrent-consumers="1"
max-concurrent-consumers="5"
max-messages-per-task="5"
receive-timeout="500"
auto-startup="true"
destination="peInputQueue" />
<int:chain id="jmsInputChain" input-channel="jmsHeaderEnricherChannel" output-channel="routerTransformChannel">
<int:header-enricher>
<int:priority value="#{T(de.axa.batch.ecmcm.cmab.util.CmabConstants).LOW_PRIO}"/>
<int:header name="countMessage" ref="counter" />
<int:header name="protocol" value="jms"/>
<int:header name="msgReceiveDate" expression="T(System).currentTimeMillis()" />
<int:error-channel ref="errorChannel"/>
</int:header-enricher>
<int-xml:unmarshalling-transformer id="jmsModelUnmarshallerTransformer" unmarshaller="jmsModelUnmarshaller"/>
</int:chain>
<int:header-value-router input-channel="routerTransformChannel" header-name="protocol">
<int:mapping value="jms" channel="jmsTransformToCoreChannel"/>
</int:header-value-router>
<int:transformer id="jmsToCoreTransformer" input-channel="jmsTransformToCoreChannel"
ref="cmabInboundQueueMapper" output-channel="validationChannel"/>
<int:service-activator input-channel="validationChannel"
output-channel="processChannel"
ref="validationBean" />
<int:service-activator input-channel="processChannel" ref="databaseProcess"/>
在上面的配置中,如果每个示例“validationBean”引发异常,则会回滚消息。但这不是我所期望的。我想将消息调整到错误通道。因此,我将“header enricher”(参见chain元素)中的header增强为errorChannel
在“validationBean”中,我识别了MessageHeader中的errorChannel,但不幸的是它不起作用。 而不是启动回滚:-( 那么我怎样才能达到我想要的解决方案呢 非常感谢您的帮助。
亲切的问候,
博多
错误通道
头。因为所有内容都在同一个线程中,所以会像普通Java一样引发异常ChannelPublishingJmsMessageListener.GatewayDelegate中捕获
错误通道
,因此会将其重新抛出到DefaultMessageListenerContainer
进行回调
上进行错误通道
配置,还应该添加一些错误处理程序
,以切断“回调或不回调”逻辑
错误通道
头。因为所有内容都在同一个线程中,所以会像普通Java一样引发异常ChannelPublishingJmsMessageListener.GatewayDelegate中捕获
错误通道
,因此会将其重新抛出到DefaultMessageListenerContainer
进行回调因此,您应该在
上进行错误通道配置,还应该添加一些错误处理程序,以切断“回调与否”逻辑。嗨,阿尔特姆,非常感谢您的帮助!我遵循您的第3点,它与自己的错误处理程序一起工作得非常好。好心,博多格拉德!好的语气应该是接受答案:-)嗨,阿泰姆,非常感谢你的帮助!我遵循您的第3点,它与自己的ErrorHandler一起工作得很好。:-)好心的问候,菩萨听到了!最好的语气是接受答案:——)