Spring 在 IntegrationFlow 上重试

Spring Retry on IntegrationFlow

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

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

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

谢谢

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

advice() 选项

如果你真的把所有的逻辑都放在一个线程和同一个调用栈中,我们确实可以想出像"retry the whole sub-flow"这样的解决方案,但是从Spring集成的角度来看它仍然看起来就像一个服务电话。为此,您需要查看 IntegrationFlowDefinition:

.gateway() EIP 方法
IntegrationFlows
    .from(kinesisInboundChannelAdapter(amazonKinesis(), streamNames))
    .gateway(sf -> sf
            .transform(new IssuanceTransformer())
            .route(router())
        , e -> e.advice(requestHandlerRetryAdvice()))
    .get();