Использование 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());
}
Трассировка стека для исключения выглядит так:
17.03.2012 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 eventStore, Guid entityId , Object evt) в C:\dev\test\CQRSTest3\CQRSTest3.Domain\Extensions.cs:строка 13 в CQRSTest3.Domain.ComandHandlers.EmployeeCommandHandler.Handle(сообщение ChangeEmployeeSalary) в C:\dev\test\CQRSTest3\CQRSTest3. Домен\ComandHandlers\Emplo yeeCommandHandler.cs:строка 55