Джимми Боагард описывает цепочку быстрого питания McDonalds здесь, сравнивая ее с диаграмма рассеяния.
Изображение рабочего процесса, украденное над статьей:
Начальные мысли о реализации:
Чтобы иметь общий интерфейс для всех типов событий, связанных с FoodOrdered, которые получат все продовольственные станции, а затем каждая станция питания сможет потреблять/создавать свой соответствующий элемент и публиковать общее событие. Пример: картошка фри и булочная с начинкой получает сообщение о заказе Fries. Станция жаркого, потребляющая заказ, объявляет ItemDoneEvent, который слушает сага.
Исходные проблемы:
Так как сага не заботится о том, какой тип пищи был завершен, только тот факт, что вся еда завершена, это, казалось бы, было бы правильным решением. Однако после предупреждает здесь относительно обмена очередями и замечает, что Consumer.Conditional фильтрация была удалена с помощью MassTransit 3.0 Кажется, что в рамках платформы говорится, что "Bad Things (TM) произойдет" с этим типом подхода. Но я не уверен, как еще вы это сделаете, не создавая запрос и ответ на сообщение, а также сопоставляя Event для каждого продукта питания на кухне. Пример: FriesOrdered, BurgerOrdered FriesCooked, BurgerCooked. Это было бы очень утомительно, если бы вам приходилось делать это для каждого предмета на кухне?
Учитывая вышеупомянутые проблемы - как выглядит хороший пример саги для такого типа рабочего процесса?