Мы разрабатываем приложение, которое будет получать события из разных систем через очередь сообщений (Azure), но возможно, что некоторые события (сообщения) не будут поступать в порядке они были отправлены. Эти события будут получены и обработаны центральной системой на основе CQRS/ES, но я беспокоюсь, что если события помещаются в хранилище событий в неправильном порядке, мы получим мусор (например, «создать заказ» после «добавить элемент заказа» «).Может использоваться источник событий для устранения поздних прибывающих событий
Являются ли типичные системы ES, предназначенные для решения этой проблемы, или мы хотим обеспечить, чтобы такие сообщения были помещены в правильном порядке, прежде чем их вставляли в хранилище событий? Если у вас есть ссылки на статьи, которые поддерживают или просмотр, это поможет.
Редактировать: Я думаю, что мое описание явно слишком расплывчато, поэтому ответы, полезные в понимании CQRS/ES, не совсем отвечают на мою проблему, поэтому я добавлю немного более подробную информацию и, надеюсь, кто-то распознает проблему.
Во-первых, игроки.
- веб-сайт переднего конца (фактически не имеет отношения к этой проблеме) поставляет заказы в систему управления.
- наша система управления, которая принимает заказы с веб-сайта и передает их на склад и размещается на сайте.
- склад, который принимает заказы, выполняет их, если это возможно, и уведомляет нас, когда заказ выполнен или не может быть частично или полностью выполнен.
Связывание склада с системой управления представляет собой довольно тонкое соединение Azure на основе облаков. Сообщения со склада отправляются на слой WCF/Soap в облаке, анализируются и отправляются по шине сообщений. Сообщение на склад отправляется по шине сообщений, а затем снова в облаке, преобразуется в вызовы Soap на сервер на складе.
Склад очень осторожен, чтобы гарантировать, что отправленные сообщения имеют идентификаторы, которые увеличиваются без пробелов, поэтому мы можем знать, когда сообщение пропущено. Однако, когда мы берем эти сообщения и отправляем их в систему управления, они транспортируются по шине сообщений и теоретически могут прийти в неправильном порядке.
Теперь, учитывая, что у нас есть порядковый номер в сообщениях, мы могли бы обеспечить, чтобы сообщения были возвращены в правильном порядке, прежде чем они будут отправлены в систему CQRS/ES, но мои вопросы, это необходимо, может ли ES фактически использоваться для изменения порядка событий в логическом порядке, в котором они были предназначены?
Являются ли события, генерируемые различными источниками? например событие 'OrderCreated' генерируется другим источником, чем событие' OrderItemAdded' и в разное время? –
Для до и после событий, см. Сообщение Грега Янга по этому вопросу http://goodenoughsoftware.net/2014/03/02/event-sourcing-and-postpre-dated-transactions/ –