はい、似たようなことが少なくとも数回前に尋ねられました。したがって、答えはわかります。単純に、新しいハンドラーでイベントを再生するだけです。しかし、実際に実装してみると、いくつかの疑問が生じます。
私はJOlivierのEventStoreを使っています。手始めに、SnapShots の概念を無視して、イベントを取得する方法だけを見ていきます。私ができるのは、次のコードだけです。
var commitList = Store.GetFrom(DateTime.UtcNow.AddSeconds(-1));
foreach (var commit in commitList)
{
foreach (var comittedEvent in commit.Events)
{
if (comittedEvent.Body is SomeDomainEvent)
Console.WriteLine(string.Format("Found interesting event: {0}", ((SomeDomainEvent)comittedEvent.Body).Value));
}
}
もちろん、ここでの最初の質問は次のとおりです。これはそれを行う方法ですか?「GetFrom」のパラメーターの使用に問題があります。これは単なる DateTime であり、すべてのサーバーが時間的に同期されているかどうかを確認できないからです。あるサーバーの時計が別のサーバーの時計より 1 分遅れている場合はどうなりますか? それとも1時間半?私は NServiceBus も使用しているので、新しいハンドラー キューは特定の時点からイベントを積み上げます。新しいアプリケーション ビューが開始時に完全に同期していることを 100% (99% ではありません) 確認しながら、EventStore からイベントを取得する方法を教えてください。
また: コードに特別なインポート メソッドを作成しますか? つまり、新しいアプリケーションのハンドラーが「SomeDomainEvent」を処理するときに電子メールを送信するとします。10,000 件の古いイベントすべてについてメールを送信したくありません。praxis/codeでこの「インポート」をどのように行いますか?