C# 在EventSourcing中,什么';关于订阅的公认智慧是什么?

C# 在EventSourcing中,什么';关于订阅的公认智慧是什么?,c#,domain-driven-design,cqrs,event-sourcing,eventstoredb,C#,Domain Driven Design,Cqrs,Event Sourcing,Eventstoredb,正如标题所示。目前,我正在使用GetEventStore后端处理我的事件,这非常有效。我的困惑在于订阅使我的阅读库保持最新 目前,我正在使用 EventStoreConnection.SubscribeToAllFrom(Position.Start, _subscriptionSettings, OnEventMaterialized, OnLiveProcessingStarted, OnSubscriptionDropped); 方法。这很有效,我有一种缓存所有特定事件观察者的方法,它们

正如标题所示。目前,我正在使用
GetEventStore
后端处理我的事件,这非常有效。我的困惑在于订阅使我的阅读库保持最新

目前,我正在使用

EventStoreConnection.SubscribeToAllFrom(Position.Start, _subscriptionSettings, OnEventMaterialized, OnLiveProcessingStarted, OnSubscriptionDropped);
方法。这很有效,我有一种缓存所有特定事件观察者的方法,它们可以很好地构建我的读取模型

但是,如果我想重播某个特定聚合的事件,该怎么办?就目前情况而言,我需要重新开始订阅,并让它顺利完成。到目前为止,我这样做的方式是存储每个观察者的当前流位置,将其与订阅进行比较,如果更大,则跳过

让每个观察者都有自己的订阅是否更好,这样只有一个可以被清除?您如何知道流id?在这种情况下,您是否需要保留您创建的每个流id,以便稍后重新订阅


一些代码示例,或者一些阅读资料,将会非常棒。我觉得我没有抓住ES谜题的最后一块来回答你的一般问题:是的,每个观察者都应该保持自己在队列中的位置

您如何知道流id?在这种情况下,您是否需要保留您创建的每个流id,以便稍后重新订阅

您的流名称应该是可复制的。我使用的格式是“events-{AggregateType}-{AggregateId}”。我为GES和流启用投影 “$events-{AggregateType}”也存在。如果需要,我可以将其用作我的一个观察者的流

将观察者的配置存储在数据库中可以轻松添加新配置:

Name: All-Projections
StreamName: $events
Position: 1200 <-- This is updated by the observer as it reads
BufferSize: 100 <-- Number of records to read at a time

Name: Customers-Rebuild
StreamName: $events-CustomerAggregate
Position: 0 <-- This consumer has not run yet
BufferSize: 100
名称:所有投影
StreamName:$events

位置:1200谢谢你再次肯定我的想法-但是,除非你同时存储每个aggregateid,否则如果你“重建”,你将不知道要连接到哪个流。这就是“客户重建”计划的来源吗?那就是给你所有的身份证?嗨,詹姆斯伍德利。使用GetEventStore,如果您运行投影,它将为您创建其他元流。例如,使用类别预测,您可以获取所有客户的所有事件。这使您不必关心完整的ID列表@詹姆斯伍德利不用担心。我为同样的问题而挣扎,很高兴与大家分享我的发现。