Джимми Boagard описывает McDonalds сеть быстрого питания here сравнивая его с scatter gather pattern.Как реализовать сагу, используя разброс/Собирают шаблон В MassTransit 3,0
Workflow изображения украдены из выше статьи:
первоначального внедрения Мысли:
Чтобы иметь общий интерфейс для всех видов событий, связанных с FoodOrdered, которые получат все продовольственные станции, а затем каждая пищевая станция сможет потреблять/создавать свои соответствующие и опубликуйте общее событие. Пример: картошка фри и булочная с начинкой получает сообщение о заказе Fries. Станция жаркого, потребляющая заказ, объявляет ItemDoneEvent, который слушает сага.
Первоначальные проблемы:
Поскольку Saga не заботится о типе пищи завершено только тот факт, что вся еда будет завершена в этом, казалось бы, быть OK решение. Однако после с предупреждениями here об обмене очередями и замечанием, что Consumer.Conditional filtering has been removed with MassTransit 3.0 Кажется, что в рамках фреймворка говорится: «Плохие вещи (ТМ) произойдут» с этим типом подхода. Но я не уверен, как еще вы это сделаете, не создавая запрос и ответ на сообщение, а также сопоставляя Event для каждого продукта питания на кухне. Пример: FriesOrdered, BurgerOrdered FriesCooked, BurgerCooked. Это было бы очень утомительно, если бы вам приходилось делать это для каждого предмета на кухне?
Учитывая вышеуказанные проблемы - как выглядит хороший пример саги для такого типа рабочего процесса?
Я могу провести качели в течение выходных и поместить образец в репозиторий MT. –
Крис, у тебя когда-нибудь был шанс задуматься? В настоящее время я рассматриваю аналогичную проблему. –
Почему вы не можете хранить список заказанных продуктов внутри экземпляра Saga и удалять элементы из списка или отмечать как «сделанные» в объектах значения списка, когда вы получаете общий «FoodReady» с конкретный 'FoodType' внутри сообщения? Когда вы в конце концов узнаете, что список пуст, вы можете завершить сагу. –