1

我有一个如下所示的集成流程,我想为整个集成流程添加重试。就像流程中的任何异常一样,我们会重试,当重试用尽时将其发送到死信队列。

IntegrationFlows
        .from(kinesisInboundChannelAdapter(amazonKinesis(), streamNames))
        .transform(new IssuanceTransformer())
        .route(router())
        .get(); 

你能帮我看看如何配置重试和死信队列吗?

谢谢

4

1 回答 1

0

您对集成流程和重试的理解略有错误。它申请了一些服务调用的重试。当我们有像您这样的复杂流程时,我们在服务调用之间也有通道。因此,您可以做的就是对您认为错误的每个组件进行重试。为此,您需要查看RequestHandlerRetryAdvice和 的advice()选项ConsumerEndpointSpec

如果你真的把所有的逻辑都放在一个线程和同一个调用栈中,我们真的可以想出像“重试整个子流程”这样的解决方案,但是从 Spring Integration 的角度来看,它仍然看起来像一个服务调用。为此,您需要查看以下.gateway()EIP 方法IntegrationFlowDefinition

IntegrationFlows
    .from(kinesisInboundChannelAdapter(amazonKinesis(), streamNames))
    .gateway(sf -> sf
            .transform(new IssuanceTransformer())
            .route(router())
        , e -> e.advice(requestHandlerRetryAdvice()))
    .get(); 
于 2018-08-15T16:18:07.773 回答