10

アグリゲートのスナップショットがイベントログと同期しなくなった場合、初期のスナップショット(同期しているはずです)からイベントを簡単に再生できます。新しいフィールドを追加/削除するとき、または既存のハンドラーのロジックを変更するときにも同じことができます。

新しい読み取りモデル(つまり、新しいレポートビュー)を追加する必要がある場合は、同じことを再度実行できます。イベントを再生します。

しかし、読み取りモデルがイベントログと同期しなくなった場合、どのように状況を処理する必要がありますか?イベントの保存と公開は1つのトランザクションで行われますが、読み取りモデルの更新は別のトランザクションで発生したため、失敗する可能性があります。最初からイベントを繰り返すことは役に立ちますが、永遠にかかる可能性があります。読み取りモデル全体のスナップショットの概念が必要ですか?

この問題をどのように解決しますか?ありがとうございました。

4

1 に答える 1

7

イベントハンドラーで失敗する理由は何ですか?「永遠」はどのくらいですか?

内部のロジックは非常に単純であるため、読み取りモデルの更新が失敗することはめったにありません(コマンドハンドラーとは異なります)。障害は一時的な問題(IO /ネットワークの停止)が原因である可能性が高く、メッセージバスによって自動的に処理されます。

ただし、読み取りモデルが何らかの理由で破損した場合は、それをリセットしてイベントをストリーミングする最も簡単な方法です。何百万ものイベントでさえ、かなり短い時間しかかかりません。さらに、Map-Reduceアプローチをいつでも使用できます。

モデルを読み取るためにスナップショットを導入することはお勧めしません。これは、アーキテクチャを複雑にするだけで、大きなメリットはないと思います。

于 2010-11-23T13:59:10.687 に答える