Aur*_*rea 3 error-handling routing exception-handling spring-integration
我开始使用Spring集成,如果可能,我不知道如何解决这种情况.
我想自动"捕获"每个可能发生在我的应用程序的服务激活器中的异常,并将此错误发送到专用队列.网关不是一个解决方案,因为我需要一些自定义代码,所以如果我正确理解了原理,我必须使用服务激活元素.
我觉得那样的事情还可以:
<jms:outbound-channel-adapter channel="errorChannel"
connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>
Run Code Online (Sandbox Code Playgroud)
那不行.我不知道Spring集成是否使用了errorChannel来确定错误.
谢谢,它似乎工作.
我让变换器监听入站组件的错误通道启动流,并在服务激活器中发生错误时获取MessagingException.现在问题是这个错误没有到达我的队列.我让你看看代码:
<jms:message-driven-channel-adapter
channel="input-channel" concurrent-consumers="1"
max-concurrent-consumers="3" connection-factory="jmsConnectionFactory"
transaction-manager="jtaTransactionManager" destination="myQueue" error-channel="myErrorChannel"/>
<transformer input-channel="myErrorChannel" output-channel="create-error-channel" ref="errorTransporter" method="transform"/>
<jms:outbound-channel-adapter channel="create-error-channel"
connection-factory="jmsConnectionFactory" destination="creationErrorQueue" extract-payload="true"/>
...
Run Code Online (Sandbox Code Playgroud)
和变压器:
public class ErrorTransporter {
@Transformer
public Message<CreateCustomerOrder> transform(MessagingException exception) {
return (Message<CreateCustomerOrder>) exception.getFailedMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
将错误通道属性添加到启动流的入站组件
error-channel="myErrorChannel"
Run Code Online (Sandbox Code Playgroud)
当上游组件(例如由service-activator调用的服务)抛出异常时,入站组件将在错误通道上放置错误消息.该消息的有效负载是MessagingException,它有两个属性:
failedMessage
cause
Run Code Online (Sandbox Code Playgroud)
那么,在你的错误流程中,添加一个变换器......
<int:transformer input-channel="myErrorChannel"
output-channel="toJmsChannel"
expression="payload.failedMessage"
Run Code Online (Sandbox Code Playgroud)
然后是你的jms出站通道适配器.
归档时间: |
|
查看次数: |
6377 次 |
最近记录: |