当实体切换上下文时处理事件源中的相关 ID 更改

问题描述 投票:0回答:1

我正在开发一个事件源应用程序,该应用程序可以抓取来自不同博彩公司的体育博彩游戏。我的系统中有两个主要聚合:

  • 游戏:代表特定博彩公司的体育博彩赛事。
  • 组合游戏桶:根据 30 分钟间隔(开始时间)将不同博彩公司具有相似名称的游戏分组的桶。每个桶可处理多个组合游戏。

问题

我想确保流中的所有事件共享相同的相关ID。理想情况下:

  • 同一流中的游戏应共享关联 ID。
  • 当游戏被组合成组合游戏桶时,它应该继承组合游戏的关联ID,确保同一组合游戏中的所有游戏共享相同的关联ID。

在游戏开始时间发生显着变化(超过 30 分钟)之前,这种方法很有效。在这种情况下,游戏从其原始组合游戏中移除并放入新的组合游戏桶中。这里的问题是原始游戏流中的correlation ID变得过时,因为它仍然指向旧的组合游戏。由于不应更改流中先前事件的相关 ID,因此没有直接的方法来更新与此游戏相关的未来事件的相关 ID。

建议的解决方案

我的一个想法是当游戏的开始时间发生显着变化时创建一个新流。旧流将发出一个

GameMovedToNewStream
事件,该事件指向新流。然而,这会导致游戏的事件历史记录被分割到多个流中。

问题

  • 在多个流中分割游戏历史是否被认为是事件溯源中的不良实践?
  • 我是否应该重新考虑游戏应与其组合游戏共享相同关联 ID 的假设?
  • 在这种情况下是否有更好的方法来维护相关 ID,同时仍然保留游戏的一致事件历史记录?

我正在寻求建议,了解我当前的方法是否符合事件溯源的最佳实践,或者是否有更优雅的方法来处理这种情况。

domain-driven-design correlation cqrs distributed-system event-sourcing
1个回答
0
投票

在重新评估我如何处理现有预测中的

CombinedGame
BookmakerGame
事件后,我决定改变方法。

我没有让博彩公司游戏与组合游戏共享关联 ID,而是在与原始

BookmakerGame
事件相同的事务中复制
CombinedGame
流本身中的“游戏配对/组合”事件。这完全消除了对组合游戏流的依赖。

因此,当游戏配对时,两个事件将保存在单个事务中:

  • CombinedGame::GameAdded
  • BookmakerGame::GameAddedToCombinedGame
© www.soinside.com 2019 - 2024. All rights reserved.