JOliver EventStore 3.0を使用し、簡単なサンプルを使い始めるだけです。EventStoreがConcurrencyExceptionを簡単にスローする原因は何ですか?
私はNServiceBusを使用して単純なpub/sub CQRSを実装しています。クライアントはバス上でコマンドを送信し、ドメインサーバはコマンドを受信して処理し、イベントストアにイベントを格納し、イベントストアのディスパッチャによってバスに発行されます。読取りモデル・サーバーは、それらのイベントにサブスクライブして読取りモデルを更新します。ファンシーで、ほんのちょっとした本です。
これは動作していますが、単純なテストでは、イベントがEventStoreに格納されているときに、ドメインサーバで(並行して)多数の同時実行例外が発生しています。正常に再試行されますが、再試行回数が5回に達すると、エラーキューにコマンドが終了することがあります。
ここで、並行処理例外の原因を調べるために調査を開始できますか。ディスパッチャを削除してイベントの保存に専念すると、同じ問題が発生します。
私はEventStoreの永続性のためにRavenDBを使用しています。私はちょうどこの、空想何もしていないよ:
using (var stream = eventStore.OpenStream(entityId, 0, int.MaxValue))
{
stream.Add(new EventMessage { Body = myEvent });
stream.CommitChanges(Guid.NewGuid());
}
例外のスタックトレースは次のようになります。
2012-03-17 18:34:01166 [Worker.14] WARN NServiceBus.Unicast.UnicastBus [(null)] <(null)> - EmployeeCommandHandlerがメッセージの処理に失敗しました。 EventStore.ConcurrencyException:タイプ の例外 'EventStore.ConcurrencyException'がスローされました。 でEventStore.OptimisticPipelineHook.PreCommit(試みをコミット) はC:\コード\公開\ EventStore \ SRC \ projの\ EventStore.Core \ OptimisticPipelineHook.cs:EventStore.OptimisticEventStore.Commitでライン 55(試みをコミット) Cで:\ Code \ public \ EventStore \ src \ proj \ EventStore.Core \ OptimisticEventStore.cs: EventStore.OptimisticEventStream.PersistChangesで(Guid commitId) にc:\ Code \ public \ EventStore \ src \ proj \ EventStore .Core \ OptimisticEventStream.cs: Cで行EventStore.OptimisticEventStream.CommitChangesで 168(GUID commitId):\コード\公開\ EventStore \ SRC \ projの\ EventStore.Core \ OptimisticEventStream.cs:CQRSTest3でライン 149。 Domain.Extensions.StoreEvent(ISto \ DEV \テスト\ CQRSTest3 \ CQRSTest3.Domain \ Extensions.cs:ライン13 CQRSTest3.Domain.ComandHandlers.EmployeeCommandHandler.Handle(ChangeEmployeeSalary メッセージ)で におけるC CにreEvents eventStore、実体識別子のGUID、オブジェクトEVT) :\ DEVの\テスト\ CQRSTest3 \ CQRSTest3.Domain \ ComandHandlers \ Emplo yeeCommandHandler.cs:ライン55
例を使用してテストを再試行してください。並行処理の問題がRavenDb統合に固有であるかどうかを確認するSQLストア? –