Spring 集成错误记录

Spring Integration error logging

我正在对 Spring 集成进行一些有趣的测试,所以我创建了这个流程(不是很困难,而且效果很好):

但我有一个问题:你知道如果出站通道适配器失败,是否有任何方法可以打印日志?我不在乎 JMS 发布操作失败,因为流程结束返回正确的书籍有效负载,但显示日志会很好,而且我认为我对 Spring IO 错误处理有点混乱。

提前致谢!

<si:channel id="purchaseBookInputChannel" />
<si:channel id="purchaseBookReplyChannel" />
<si:channel id="purchaseBookRoutingChannel" />
<si:channel id="purchaseBookJmsInputChannel" />

<si:chain id="purchaseBookChain" input-channel="purchaseBookInputChannel" output-channel="purchaseBookRoutingChannel">
    <si:service-activator ref="bookServiceActivator" method="purchase" />
    <si:transformer ref="bookTransformer" method="transform" />
</si:chain>

<si:recipient-list-router id="purchaseBookRouter" input-channel="purchaseBookRoutingChannel" ignore-send-failures="true" >
        <si:recipient channel="purchaseBookJmsInputChannel" />
        <si:recipient channel="purchaseBookReplyChannel" />
</si:recipient-list-router>

<si-jms:outbound-channel-adapter channel="purchaseBookJmsInputChannel" connection-factory="connectionFactory" destination="bookQueue">
    <si-jms:request-handler-advice-chain>
        <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">               
            <property name="onFailureExpression" value="#exception" />
            <property name="failureChannel" ref="logginChannel" />
            <property name="trapException" value="true" />
        </bean>
    </si-jms:request-handler-advice-chain>
</si-jms:outbound-channel-adapter>

<si:logging-channel-adapter id="logginChannel" level="WARN"/>

更新

您好,感谢您的宝贵时间!

我想我做错了什么,因为我正在测试 request-handler-advice-chain/error-channel,这就是我得到的结果:

这就是我正在寻找的行为:

关于如何在不中止流程的情况下打印日志的任何线索?。如果我使用 属性 ignore-send-failures="true" 流程会忽略 JMS 错误,但不会打印错误日志。

祝你有愉快的一天!

首先我认为你是不对的。

最好将消息发布到 JMS,然后才 return 回复。因此,对于实际应用程序来说,更改 <si:recipient-list-router>.

的通道顺序会更好

从另一端记录和抑制来自 <si-jms:outbound-channel-adapter> 的异常,您应该将 <request-handler-advice-chain> 添加到该适配器并提供 ExpressionEvaluatingRequestHandlerAdvicefailureChannel<logging-channel-adapter>.

更新

ExpressionEvaluatingRequestHandlerAdvice 有一个 trapException 选项。将其设置为 true 并且不会重新抛出来自 JMS 的异常。