向端点添加行为

在 Spring Integration 2.2 之前,可以通过向轮询器的<advice-chain/>元素添加 AOP Advice 来向整个集成流程添加行为。但是,假设您只想重试 REST Web 服务调用,而不是任何下游端点。

例如,考虑以下流程

inbound-adapter->poller->http-gateway1->http-gateway2->jdbc-outbound-adapter

如果您在轮询器的 advice chain 中配置了一些重试逻辑,并且由于网络故障导致对http-gateway2的调用失败,则重试会导致http-gateway1http-gateway2都被再次调用一次。类似地,在 jdbc-outbound-adapter 中发生短暂故障后,两个 HTTP 网关都会再次被调用,然后再调用jdbc-outbound-adapter

Spring Integration 2.2 增加了向各个端点添加行为的能力。这是通过向许多端点添加<request-handler-advice-chain/>元素实现的。以下示例显示了如何在outbound-gateway内使用<request-handler-advice-chain/>元素

<int-http:outbound-gateway id="withAdvice"
    url-expression="'https://127.0.0.1/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之后在下游采取的进一步操作。Advice 的范围仅限于端点本身。

目前,您无法为整个<chain/>端点提供建议。模式不允许将<request-handler-advice-chain>作为链本身的子元素。

但是,可以将<request-handler-advice-chain>添加到<chain>元素中的各个产生回复的端点。例外情况是,在不产生回复的链中,因为链中的最后一个元素是outbound-channel-adapter,所以最后一个元素不能提供建议。如果您需要建议此类元素,则必须将其移出链(将链的output-channel作为适配器的input-channel)。然后可以像往常一样为适配器提供建议。对于产生回复的链,可以为每个子元素提供建议。