我开始使用 Spring 集成,如果可能的话,我不知道如何解决这种情况。
我想自动“捕获”我的应用程序的服务激活器中可能发生的每个异常,并将此错误发送到专用队列。网关不是解决方案,因为我需要一些自定义代码,所以如果我正确理解了原理,我必须使用服务激活器元素。
我认为类似的东西会没问题:
<jms:outbound-channel-adapter channel="errorChannel"
connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>
那是行不通的。我不知道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"/>
...
还有变压器:
public class ErrorTransporter {
@Transformer
public Message<CreateCustomerOrder> transform(MessagingException exception) {
return (Message<CreateCustomerOrder>) exception.getFailedMessage();
}
}
提前感谢您的帮助!