2016-07-05 67 views
1

在需要構建新視圖的場景中,我們可以重放EventStore中的所有事件。因此,我們會預測新的觀點。事件源:避免項目重複事件,同時重播事件並收聽新來的事件

因此,這個想法是部署一個新的投影,投影所有舊事件(通過重放),並聽取新的傳入事件並進行投影。

我認爲比賽條件可能發生在閱讀舊事件和收聽新來的事件。因此,我們可以多次投影同一個事件,然後破壞新視圖。

那麼,在要重播的事件和新的傳入事件之間畫一條線是一種好方法?

謝謝!

回答

2

EventStore通過Catch-up Subscriptions

支持這種情況下您會指定流作爲起點用戶的一開始,就再處理的所有事件,直到「現在」,然後開始聽而來事件in。

Connection.SubscribeToStreamFrom(
    StreamName, 
    checkpoint, 
    resolveLinkTos, 
    OnEventReceived, 
    OnLiveProcessingStarted, 
    OnSubscriptionDropped); 

您甚至會在您開始處理實況時收到事件。 :)對於這樣的事情

更普遍的建議是:

  1. 使這一進程不可改變的,因此,如果您收到相同的事件兩次
  2. 在接收端去複製它並不重要 - 你需要保持它的事件已經處理
0

從Greg Young的通話記錄,我可以總結一下EventStore的工作原理類似Atom提要。因此,預測(aka用戶)輪詢事件是因爲跟蹤哪個用戶保持的id

然後EventStore不知道新投影是否需要重播所有事件。 EventStore,在Greg Young的話,接收

給我'n個事件 'X'

+0

不,你沒有正確描述GES後。當他們的客戶使用GES進行集成和其他外來原因時,您已經聽他的談話描述了一些邊緣用例。雖然是完全有效的用例,但這與事件採購無關。 –

+0

對不起,我沒有看到這與原始問題有關。你是正確的,訂閱者在流中的位置是訂閱者的責任,但你原來的問題是關於提出一個新的訂閱者,並避免處理我認爲我的答案涉及的重複事件。在這個例子中,X是流的開始(-1?)。也同意alexey,這不是與事件採購 – tomliversidge

+0

@AlexeyZimarev,(@)tomliversidge請檢查下面的談話從41:30 https://www.youtube.com/watch?v=uBzS9JoMJW0也許我不明白但是我認爲他解釋得很好。否則,請用新的答案澄清。我會感激的。 – martinezdelariva