Что заставляет EventStore так легко вызывать ConcurrencyException?

С помощьюJOliver EventStore 3.0, и только начинаем с простых примеров.

У меня есть простая реализация pub / sub CQRS с использованием NServiceBus. Клиент отправляет команды на шину, сервер домена получает и обрабатывает команды и сохраняет события в хранилище событий, которые затем публикуются на шине диспетчером хранилища событий. сервер модели чтения затем подписывается на эти события, чтобы обновить модель чтения. Ничего особенного, в основном, по книге.

Это работает, но только в простых тестах я получаю множество исключений параллелизма (периодически) на сервере домена, когда событие сохраняется в EventStore. Он правильно повторяет попытку, но иногда достигает предела 5 попыток, и команда попадает в очередь ошибок.

С чего бы мне начать расследование, чтобы узнать, что вызывает исключение параллелизма? Я удаляю диспетчер и просто сосредотачиваюсь на хранении событий, и у него та же проблема.

Я использую RavenDB для сохранения моего EventStore. Я не делаю ничего особенного, только это:

using (var stream = eventStore.OpenStream(entityId, 0, int.MaxValue))
{
  stream.Add(new EventMessage { Body = myEvent });
  stream.CommitChanges(Guid.NewGuid());
}

Трассировка стека для исключения выглядит следующим образом:

2012-03-17 18: 34: 01,166 [Worker.14] WARN NServiceBus.Unicast.UnicastBus [(null)] <(null)> - EmployeeCommandHandler не удалось обработать сообщение. EventStore.ConcurrencyException: было сгенерировано исключение типа 'EventStore.ConcurrencyException'. в EventStore.OptimisticPipelineHook.PreCommit (попытка фиксации) в c: \ Code \ public \ EventStore \ src \ proj \ EventStore.Core \ OptimisticPipelineHook.cs: строка 55 в EventStore.OptimisticEventStore.Commit (попытка фиксации) в c: \ Code \ public \ EventStore \ src \ proj \ EventStore.Core \ OptimisticEventStore.cs: строка 90 в EventStore.OptimisticEventStream.PersistChanges (Guid commitId) в c: \ Code \ public \ EventStore \ src \ proj \ EventStore.Core \ OptimisticEventStream.cs: строка 168 в EventStore.OptimisticEventStream.CommitChanges (Guid commitId) в c: \ Code \ public \ EventStore \ src \ proj \ EventStore.Core \ OptimisticEventStream.cs: строка 149 в CQRSTest3.Domain.Extensions.StoreEvent (объект-хранилище событий объекта IStoreEvents) , Объект evt) в C: \ dev \ test \ CQRSTest3 \ CQRSTest3.Domain \ Extensions.cs: строка 13 в CQRSTest3.Domain.ComandHandlers.EmployeeCommandHandler.Handle (сообщение ChangeEmployeeSalary) в C: \ dev \ test \ CQRSTest3 \ C. Домен \ ComandHandlers \ Emplo yeeCommandHandler.cs: строка 55

Ответы на вопрос(1)

Ваш ответ на вопрос