2

正如标题所示。目前我正在GetEventStore为我的活动使用后端,而且效果很好。我的困惑在于让我的阅读存储保持最新的订阅。

目前我正在使用

EventStoreConnection.SubscribeToAllFrom(Position.Start, _subscriptionSettings, OnEventMaterialized, OnLiveProcessingStarted, OnSubscriptionDropped);

方法。这很好用,我有办法缓存我所有的特定事件观察者,它们很好地构建了我的读取模型。

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

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

一些代码示例,或者一些阅读,会很棒。我觉得我错过了 ES 拼图的最后一块

4

1 回答 1

2

回答您的一般问题:是的,每个观察者都应该在队列中保持自己的位置。

在这种情况下,您如何知道流 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

然后您可以运行您的基本消费者可执行文件并将观察者名称作为参数传递。

于 2019-07-22T19:46:49.557 回答