Akka 事件存储中的数据是什么样子的?

Akka 事件存储中的数据是什么样子的?,akka,akka-persistence,Akka,Akka Persistence,我知道事件源是关于存储表示状态变化的事件,而不是状态本身。在我的例子中,我从卡夫卡那里得到消息,每条消息都用JSON编码,有50个字段,比如{key1:val1,key2:val2,…..key50:val50},每条消息都有这些键的全部或子集。现在,我的目标是将这些消息流存储为Cassandra中的事件,而要存储状态更改,我始终需要知道当前状态才能看到下一个请求引起的状态更改,但我想知道这是如何实现的,或者更重要的是,数据存储中的数据会是什么样子?数据存储中的事件可能是这样的(存储在sql数据

我知道事件源是关于存储表示状态变化的事件,而不是状态本身。在我的例子中,我从卡夫卡那里得到消息,每条消息都用JSON编码,有50个字段,比如
{key1:val1,key2:val2,…..key50:val50}
,每条消息都有这些键的全部或子集。现在,我的目标是将这些消息流存储为Cassandra中的事件,而要存储状态更改,我始终需要知道当前状态才能看到下一个请求引起的状态更改,但我想知道这是如何实现的,或者更重要的是,数据存储中的数据会是什么样子?

数据存储中的事件可能是这样的(存储在sql数据库中):

  • 身份证
  • uuid:eventSourcing聚合ID
  • playhead:此聚合的事件数索引(例如:事件数5)
  • 类型:事件的名称(例如:CardWasCredited)
  • 有效负载:此特定事件所需的所有数据(例如:对于CardWasCreated事件,您将有“金额、卡号、注释……等”
  • 元数据:用户名
  • 录制

然后处理这些事件以创建一个读取模型,该模型保存当前状态(CQR)

它取决于序列化程序。不过,您始终可以使用一些持久参与者和一些变量来存储当前状态并将其与下一个请求进行比较。因此,如果我的当前状态a=
{key1:val1,key2:val2
每次请求时都可以存储?如果事件需要这些值,则可以。但请注意了解整个事件源流程:命令->事件->状态。可能您的Kafka消息是命令,应该转换为一个或多个域事件(每个域事件都有自己的“键”子集)我的事件只不过是在数据库中插入了一行。实际上,没有任何业务逻辑或计算。因此,我将最终存储事件名称和有效负载
{key1:val1,key2:val2,…..key50:val50}
每次?如果您只想在db行中插入消息,并且需要这些键,则选择“是”,存储每条消息的所有内容。但如果没有消息的“业务”验证来将这些命令转换为事件,则不是事件源,而是持久化消息。