【发布时间】:2019-12-15 23:13:28
【问题描述】:
假设您在使用 java/spring/hibernate 的微服务设置中拥有相同服务的两个或多个实例。为了让这个例子更清楚一点,让我们假设我们有:
-
books服务,创建/更新书籍 -
book-details服务将处理书籍的详细信息 -
tasks服务将为创建/更新的书籍创建一些任务
我正在尝试解决并找出处理此问题的最佳方法与以下情况有关:
- 多次发出相同的事件(例如第 1 本书已更新)
-
book 1 updated更新事件由book-details服务选择,在其处理后将发出book 1 details updated event。这两个事件都将在tasks服务中处理。
tasks 最终会做的是检查是否存在并为此主题创建或删除任务(在本例中为第 1 册)。这可能是一个复杂的操作,不能是原子数据库事务。
鉴于多个实例订阅同一个主题,同一事件可能被多个实例同时处理导致完整性约束错误(由于唯一索引)。
如何正确处理?理想的情况是实例#1 处理book 1,但不阻止实例#2 处理book 2。虽然相同的 book 1 事件正在为同一个实例排队。
【问题讨论】:
-
使用jms框架并开始使用认知模式?
-
理想的解决方案是为此提供与应用程序级别无关的解决方案
标签: java spring hibernate microservices