向终端节点添加行为
在 Spring Integration 2.2 之前,你可以通过向 Poller 的元素添加 AOP Advice 来向整个 Integration 流添加行为。
但是,假设您只想重试 REST Web 服务调用,而不重试任何下游终端节点。<advice-chain/>
例如,请考虑以程:
inbound-adapter->poller->http-gateway1->http-gateway2->jdbc-outbound-adapter
如果你在 Poller 上的建议链中配置了一些重试逻辑,并且由于网络故障而对 的调用失败,则重试会导致 和 被第二次调用。
同样,在 jdbc-outbound-adapter 中出现暂时性故障后,两个 HTTP 网关都会被第二次调用,然后再次调用 .http-gateway2
http-gateway1
http-gateway2
jdbc-outbound-adapter
Spring Integration 2.2 增加了向单个端点添加行为的能力。
这是通过将元素添加到许多端点来实现的。
以下示例演示如何在 :<request-handler-advice-chain/>
<request-handler-advice-chain/>
outbound-gateway
<int-http:outbound-gateway id="withAdvice"
url-expression="'http://localhost/test1'"
request-channel="requests"
reply-channel="nextChannel">
<int-http:request-handler-advice-chain>
<ref bean="myRetryAdvice" />
</int-http:request-handler-advice-chain>
</int-http:outbound-gateway>
在这种情况下,仅本地应用于此网关,不适用于在将回复发送到 后向下游采取的进一步操作。
建议的范围仅限于终端节点本身。myRetryAdvice
nextChannel
此时,您无法建议整个终端节点。
架构不允许 a 作为链本身的子元素。 但是,可以将 a 添加到元素中生成回复的各个终结点。
一个例外是,在没有生成回复的链中,因为链中的最后一个元素是 ,所以不能通知最后一个元素。
如果你需要通知这样的元素,它必须移动到链之外(链的 是适配器的)。
然后可以像往常一样通知适配器。
对于生成 reply 的链,可以通知每个 child element。 |