Exception handling Spring集成—在Service Activator组件中发生异常时写入错误队列

Exception handling Spring集成—在Service Activator组件中发生异常时写入错误队列,exception-handling,error-handling,routing,spring-integration,Exception Handling,Error Handling,Routing,Spring Integration,我开始使用Spring集成,如果可能的话,我不知道如何解决这种情况 我希望自动“捕获”应用程序的服务激活器中可能发生的每个异常,并将此错误发送到专用队列。 网关不是一个解决方案,因为我需要一些自定义代码,所以如果我正确理解了原理,我必须使用ServiceActivator元素 我想这样的事情也可以: <jms:outbound-channel-adapter channel="errorChannel" connectio

我开始使用Spring集成,如果可能的话,我不知道如何解决这种情况

我希望自动“捕获”应用程序的服务激活器中可能发生的每个异常,并将此错误发送到专用队列。 网关不是一个解决方案,因为我需要一些自定义代码,所以如果我正确理解了原理,我必须使用ServiceActivator元素

我想这样的事情也可以:

<jms:outbound-channel-adapter channel="errorChannel"
                                  connection-factory="jmsConnectionFactory" destination="oneErrorQueue"/>

这是行不通的。我不知道spring integration是否真的使用了errorChannel来输入错误


谢谢你,它似乎起作用了

我已经让转换器监听入站组件启动流的错误通道,当ServiceActivator中发生错误时,它将获得MessaginException。现在的问题是这个错误没有到达我的队列。我让你看看代码:

<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();
    }
}
公共类错误传输程序{
@变压器
公共消息转换(MessaginException异常){
返回(消息)异常。getFailedMessage();
}
}

提前感谢您的帮助

向启动流的入站组件添加错误通道属性

error-channel="myErrorChannel"
当上游组件(例如服务激活器调用的服务)引发异常时,入站组件将在错误通道上显示错误消息。该消息的有效负载是一个MessaginException,它有两个属性:

failedMessage
cause
所以,在错误流中,添加一个转换器

<int:transformer input-channel="myErrorChannel"
    output-channel="toJmsChannel"
    expression="payload.failedMessage"