有一个Spring Integration
由多个组成的应用程序integration flows
,并且该应用程序被部署为容器Kubernetes
。容器根据负载自动扩展。
在这些多个集成流中,有一个这样的流会重试来自 DB 的失败记录,并且在任何时间点都只能运行它的一个实例(类似于Quartz
中的集成Spring Batch
)。
这种行为如何实现Spring Integration
?
有一个Spring Integration
由多个组成的应用程序integration flows
,并且该应用程序被部署为容器Kubernetes
。容器根据负载自动扩展。
在这些多个集成流中,有一个这样的流会重试来自 DB 的失败记录,并且在任何时间点都只能运行它的一个实例(类似于Quartz
中的集成Spring Batch
)。
这种行为如何实现Spring Integration
?
您可以使用分布式锁实现这一点:https://docs.spring.io/spring-integration/reference/distributed-locks.html。因此,即使所有节点都等待锁,也只有一个节点能够处理这些轮询记录,依此类推。其余节点将处于空闲状态,并以空轮询结果快速结束其进程。
另一种模式是使用
QueueChannel
DB 的后端MessageStore
,只有一个节点会提取记录并进行处理。队列中的下一条消息可能由另一个节点处理。如果处理失败,事务将回滚,消息将返回到 DB。有关更多信息,请参阅文档:https ://docs.spring.io/spring-integration/reference/message-store.html