Где находится авторитетный репозиторий для вашего доменного события - это деталь реализации.Например, вы можете хранить сериализованные версии на S3 или CouchDB или любом другом количестве реализаций хранилища.Самым простым, если вы только начинаете, является реляционная база данных.
Обычно люди используют обработчики событий, которые понимают бизнес-намерения, стоящие за каждым сообщением, и могут затем надлежащим образом денормализовать сообщение в структуру модели чтения, соответствующую потребностямваши представления.
Если модель представления когда-либо повреждена или, возможно, у вас есть ошибка в обработчике модели представления, есть несколько простых шагов, которые нужно выполнить после исправления ошибки:
Временно ставьте в очередь поток событий, поступающих из домена - это типичные сообщения, которые публикуются, когда ваш домен выполняет работу.Мы все еще хотим эти сообщения, но не только пока.Это можно сделать, отключив любую шину сообщений или не подключившись к инфраструктуре очередей, если вы ее используете.
Чтение всех событий из хранилища событий.По мере получения каждого события (это можно сделать с помощью простого запроса к БД), запускайте каждое сообщение через соответствующий обработчик сообщений.Убедитесь, что вы отслеживаете последние 10 000 (или около того) идентификаторов для всех обработанных сообщений.
Теперь снова подключитесь к своим очередям и начните обработку в обычном режиме.Если идентификатор сообщения был замечен, отбросьте сообщение.В противном случае обработайте его как обычно.
Причина отслеживания идентификаторов состоит в том, чтобы избежать условия гонки, когда вы получаете все события из хранилища событий, но через сообщение передается одно и то же сообщение.Очередь.
Другой метод, который тесно связан, но включает отслеживание всех идентификаторов сообщений, можно найти здесь: http://blog.jonathanoliver.com/2011/03/removing-2pc-two-phase-commit.html