具有重试机制的 DSL Integration Flows 及其工作原理

DSL Integration Flows with retry mechanism and how it works

我已经实施了一个基于以下内容的重试机制:

https://github.com/spring-projects/spring-integration-samples/issues/237

应用程序使用来自 kafka 的事件,转换这些事件并将它们作为 HTTP 请求发送到远程服务,因此它在发送 HTTP 请求的集成流中实现了重试机制。

我担心在临时故障(网络故障)期间以与来自 kafka 的请求相同的顺序将请求发送到远程服务以避免覆盖,但幸运的是看起来顺序保持不变,保持老实说。

似乎在重试过程中,所有进入的事件都被“搁置”,一旦远程服务在最后一次尝试之前恢复,所有事件都会被发送。

这里我想知道两件事:

  1. 我的假设正确吗?这是重试机制默认的工作方式吗?
  2. 由于完成当前流程执行所需的时间,我担心事件会返回(或堆叠)。这里有什么我应该考虑的吗?

我想我可能会使用 ExecutorChannel 以便可以并行处理事件,但这样做我将无法保持事件的顺序。

谢谢。

你的假设是正确的。重试是在同一个线程中完成的,并且在发送成功或重试用完之前会被下一个事件阻塞。它实际上是在同一个 Kafka 消费者线程中完成的,因此在重试完成之前不会从主题中提取新记录。

将逻辑转移到新线程中不是正确的架构,例如使用 ExecutorChannel 因为 Kafka 基于不能乱序完成的偏移量提交。