相关疑难解决方法(0)

微服务事件驱动架构的设计选择

假设我们有以下内容:

DDD聚合了A和B,A可以引用B。

管理 A 的微服务公开以下命令:

  • 创建一个
  • 删除A
  • 链接 A 到 B
  • 取消 A 与 B 的链接

管理 B 的微服务公开以下命令:

  • 创建 B
  • 删除B

成功的创建、删除、链接或取消链接总是会导致执行该操作的微服务发出相应的事件。

为这两个微服务设计事件驱动架构的最佳方法是什么,以便:

  1. A 和 B 最终将始终彼此一致。通过一致性,我的意思是如果 B 不存在,A 不应该引用 B。
  2. 来自两个微服务的事件可以轻松地投射到单独的读取模型中,在该模型上可以进行跨越 A 和 B 的查询

具体来说,以下示例可能会导致暂时的不一致状态,但最终必须在所有情况下恢复一致性:

示例 1

  • 初始一致状态:A 存在,B 不存在,A 未链接到 B
  • 命令:将 A 链接到 B

示例 2

  • 初始一致状态:A 存在,B 存在,A 链接到 B
  • 命令:删除 B

示例 3

  • 初始一致状态:A 存在,B 存在,A 未链接到 B
  • 两个同时执行的命令:将 A 链接到 B 并删除 B

我有两个解决方案。

解决方案1

  • 微服务 A 仅允许将 A 链接到 B,前提是它之前已收到“B 创建”事件且没有“B …

domain-driven-design cqrs microservices

5
推荐指数
1
解决办法
830
查看次数

标签 统计

cqrs ×1

domain-driven-design ×1

microservices ×1