2016-06-15 8 views
5

Что было бы лучше, если бы у вас была управляемая событиями архитектура, а служба, подписавшаяся на события, должна была ждать нескольких событий (одного типа), прежде чем приступать к созданию следующего события в цепочке?Обработка зависимостей нескольких событий в управляемой событиями архитектуре

Примером может служить служба обработки заказов на книги, которая должна дождаться, когда каждая книга будет обработана на складе, прежде чем создавать событие, которое было выбрано, чтобы служба доставки (или что-то подобное) берет заказ и начинает подготовку к отправке.

ответ

5

Вы можете использовать шаблон Aggregator, также называемый Parallel Convoy.

По сути, вам нужно иметь способ идентификации сообщений, которые необходимо агрегировать, и когда агрегированный набор в целом был получен, так что обработка может начаться.

Без выхода и buying the book * на платформе интеграции платформы Apache Camel есть nice resource при реализации шаблона агрегатора. Хотя это, очевидно, характерно для Camel, вы можете видеть, какие вещи задействованы.

* отказ от ответственности, я не связан каким-либо образом с Adison Уэсли, или какой-либо из авторов книги ...

+0

Спасибо за предложение. Я действительно имею доступ к книге через Safari Books Online. Похоже, что Агрегатор - это то, что я искал. – Patrick

12

Еще один полезный шаблон рядом с агрегатором, что Том упомянутого выше a saga pattern (мини рабочий процесс). Я использовал его раньше в библиотеке сообщений с именем NServiceBus, чтобы обрабатывать координацию нескольких сообщений, которые коррелируют друг с другом.

шаблон очень полезен и хорошо подходит для длительных процессов. даже если ваши коррелированные сообщения - это разные сообщения, такие как OrderStarted, OrderLineProcessed, OrderCompleted.

+0

Хорошее предложение. Я изучал его, чтобы обрабатывать процессы, которые могут не работать во время выполнения, поэтому его можно получить при перезагрузке службы или запуске нового экземпляра. – Patrick