Spring 在 IntegrationFlow 上重试
Spring Retry on IntegrationFlow
我有一个如下所示的集成流程,我想为整个集成流程添加重试。与流程中的任何异常一样,我们会重试,当重试次数耗尽时将其发送到死信队列。
IntegrationFlows
.from(kinesisInboundChannelAdapter(amazonKinesis(), streamNames))
.transform(new IssuanceTransformer())
.route(router())
.get();
你能帮我看看如何配置重试和死信队列吗?
谢谢
您对集成流程和重试的理解略有错误。重试它申请了一些服务电话。当我们有像您这样的复杂流程时,我们在服务调用之间也有通道。因此,您可以做的是对您认为错误的每个组件进行重试。为此,您需要查看 RequestHandlerRetryAdvice
和 ConsumerEndpointSpec
.
的 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();
我有一个如下所示的集成流程,我想为整个集成流程添加重试。与流程中的任何异常一样,我们会重试,当重试次数耗尽时将其发送到死信队列。
IntegrationFlows
.from(kinesisInboundChannelAdapter(amazonKinesis(), streamNames))
.transform(new IssuanceTransformer())
.route(router())
.get();
你能帮我看看如何配置重试和死信队列吗?
谢谢
您对集成流程和重试的理解略有错误。重试它申请了一些服务电话。当我们有像您这样的复杂流程时,我们在服务调用之间也有通道。因此,您可以做的是对您认为错误的每个组件进行重试。为此,您需要查看 RequestHandlerRetryAdvice
和 ConsumerEndpointSpec
.
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();