1

我目前正在尝试重构 JMS 消息的处理以在分布式/云环境中工作。为了允许更好的重试和错误处理,消息首先使用 JPA 实体存储到数据库中,然后由 spring 集成 jpa 入站适配器读取。只要我的服务的一个实例正在运行,这就可以正常工作。但是,当多个实例正在运行时,即使在持久消息上引入处理状态后,这些实例也会尝试处理相同的消息。

我已经尝试将 JMS 消息保存在 JDBC 消息存储中,但是我必须定义一个组标识符,根据该组标识符,实例可以选择一条实际上不可能的消息,因为实例的数量是动态的,我不能为每个实例分配一个组 ID。另一种可能性可能是某种带有 LockRegistry 的分布式锁,但我无法做到这一点。

您是否有任何提示/建议我可以如何通过 Spring 集成最好地实现以下要求:

  • JMS 消息应该被持久化
  • 任何实例都可以获取消息并进行处理
  • 如果处理失败,将重试 x 次(也可以由另一个实例重试)
  • 如果实例在处理过程中崩溃或被杀死,则消息不能丢失

是否有一些可能有帮助的 spring-cloud 组件?我对我应该朝哪个方向前进的每一个提示感到高兴。

4

0 回答 0