spring 集成中的错误 handling/propagation
error handling/propagation in spring integration
我读到如果流程中抛出异常,框架要做的第一件事是检查消息 header 是否有 error-channel 属性。总是这样吗?
在我的特定情况下,我将自定义 error-channel 分配给消息 header,但消息似乎向上传播到最近的 error-handler/error-channel。
<int:chain id="buildAggregatedResponseChain" input-channel="aggregatedResultChannel"
output-channel="sendAggregatedChannel">
<int:header-enricher>
<int:error-channel ref="myErrorChannel"/>
</int:header-enricher>
<int:service-activator ref="service" method="doSomething"/>
</int:chain>
我在 doSomething 中明确抛出一个异常,但异常永远不会在 myErrorChannel 中结束。相反,它 "propagated" 到流上游最近的 ErrorHandler 或流上游指定的 error-channel int-mail:imap-idle-channel-adapter(尝试了几种不同的流程)。
我想念什么?也许有人可以概述错误 handling/error 传播的主要原则(例如,在谈论多个交易等时)?那里有一些资料,但是比较零散,不系统。
取决于上游流量;如果存在异步切换,则咨询 header;否则,异常将被抛回入站端点。
一般来说,我建议不要修改框架 header,例如 errorChannel
。而是在入站端点(例如您的 imap 空闲适配器)上放置一个 error-channel
并处理该流上的错误。
很少需要直接修改 headers。如果你想插入不同的 error-handling mid-flow 那么你可以插入一个消息网关...
<int:service activator ... ref="gw" />
<int:gateway id="gw" default-request-channel="..."
error-channel="midFlowErrorChannel" />
如果下游流(来自网关)returns 没有成功结果,那么一定要添加默认回复超时 0(或使用自定义服务接口,其方法 returns无效)。
我读到如果流程中抛出异常,框架要做的第一件事是检查消息 header 是否有 error-channel 属性。总是这样吗?
在我的特定情况下,我将自定义 error-channel 分配给消息 header,但消息似乎向上传播到最近的 error-handler/error-channel。
<int:chain id="buildAggregatedResponseChain" input-channel="aggregatedResultChannel"
output-channel="sendAggregatedChannel">
<int:header-enricher>
<int:error-channel ref="myErrorChannel"/>
</int:header-enricher>
<int:service-activator ref="service" method="doSomething"/>
</int:chain>
我在 doSomething 中明确抛出一个异常,但异常永远不会在 myErrorChannel 中结束。相反,它 "propagated" 到流上游最近的 ErrorHandler 或流上游指定的 error-channel int-mail:imap-idle-channel-adapter(尝试了几种不同的流程)。 我想念什么?也许有人可以概述错误 handling/error 传播的主要原则(例如,在谈论多个交易等时)?那里有一些资料,但是比较零散,不系统。
取决于上游流量;如果存在异步切换,则咨询 header;否则,异常将被抛回入站端点。
一般来说,我建议不要修改框架 header,例如 errorChannel
。而是在入站端点(例如您的 imap 空闲适配器)上放置一个 error-channel
并处理该流上的错误。
很少需要直接修改 headers。如果你想插入不同的 error-handling mid-flow 那么你可以插入一个消息网关...
<int:service activator ... ref="gw" />
<int:gateway id="gw" default-request-channel="..."
error-channel="midFlowErrorChannel" />
如果下游流(来自网关)returns 没有成功结果,那么一定要添加默认回复超时 0(或使用自定义服务接口,其方法 returns无效)。