我有一些测试Spring Integration的乐趣,所以我创建了这个流程(不是很困难,它就像一个魅力):
但是我有一个问题:如果出站通道适配器出现故障,您是否知道是否有任何方法可以打印日志?我不关心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"/>
更新
您好,感谢您的时间!
我认为我做错了,因为我正在测试请求处理程序 - 建议链/错误通道,这就是我所得到的:
这就是我正在寻找的行为:
有关如何在不中止流量的情况下打印日志的任何线索?如果我使用属性ignore-send-failures="true"
,流程将忽略JMS错误,但不会打印错误日志。
度过美好的一天!
答案 0 :(得分:0)
首先,我认为你是对的。
最好将消息发布到JMS,然后才返回到答复。因此,对于真实应用来说,改变<si:recipient-list-router>
的频道顺序会更好。
从另一方记录并禁止<si-jms:outbound-channel-adapter>
中的异常,您应该将<request-handler-advice-chain>
添加到该适配器,并向ExpressionEvaluatingRequestHandlerAdvice
提供failureChannel
<logging-channel-adapter>
ExpressionEvaluatingRequestHandlerAdvice
}。
<强>更新强>
trapException
有一个true
选项。将其设置为{{1}},您对JMS的例外情况不会被重新抛出。