2012-01-16 2 views
0

В ответ на few questions Джонатан Оливер упоминает использование AsynchronousCommitDispatcher для обработки нескольких единиц работ.EventStore и более одной единицы работы?

Я до сих пор в стадии разработки моего проекта (и все еще учусь CRQS и ES) и есть несколько вопросов:

1) Буду ли я создать AsynchronousCommitDispatcher для каждого агрегатного корня, которые будут затронуты в области событие поднято?

2) Что произойдет, если у меня есть механизм блокировки, когда отправленное событие не может внести изменения в общий узел, если он заблокирован другим пользователем? Повторяет ли AsynchronousCommitDispatcher, если есть блокировка?

3) Что делать, если система опускается до обработки события домена? Если я не буду настаивать на том, что он не был обработан, разве он не будет потерян?

4) Мое первоначальное понимание заключалось в том, что типы диспетчеров предназначались для обмена сообщениями по проводам или для обновления модели чтения. Здесь мы используем его для обновления другого заполнителя. Я это правильно?

ТИА

JD

ответ

2

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

Диспетчер не связан с обработкой входящего сообщения - для этого предназначены ваши обработчики сообщений. Диспетчер просто отправляет, когда все будет завершено.

Да, диспетчеры могут помочь обновить модели чтения, но не так, как вы думаете. Вместо этого диспетчеры просто вставляют сообщения в рамки обмена сообщениями (MSMQ, RabbitMQ или на более высоком уровне, NServiceBus/MassTransit). Затем, как только сообщение получено в ваших моделях просмотра, вы соответствующим образом обновляете свои таблицы модели просмотра.

+0

Спасибо, Джонатан за ваш ответ. Я все еще немного смущен, если у меня есть сводный корень, который должен изменить другой агрегат, как бы я это сделал? Это что-то, что я сделал бы за пределами функциональности хранилища событий? –

+0

EventStore не заботится об агрегатах или что-то в этом роде. Он заботится только о добавлении событий в конец потока. –

Смежные вопросы