EventStore и более одной единицы работы? - PullRequest
0 голосов
/ 16 января 2012

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

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

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

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

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

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

ТИА

JD

1 Ответ

2 голосов
/ 18 января 2012

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

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

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

...