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

Мой главный приоритет и первая функция, которая мне нужна, это система заказов для клиентов, когда они заказывают еду или доставку, я получаю заказ и начинаю работать над ним.

Вы, как великий программист, начали работать и дали мне отличный новый метод под названием

MakeOrder (модель OrderDetails) и в той последовательности, которую вы вызываете впоследствии

SendOrderToCashier (модель OrderDetails)

Благодаря вам после этих 2-х методов конверсия растет, а доход увеличивается. Я выбрал отличного партнера.

Но у меня есть новый запрос в системе, я хочу новую функцию, чтобы при отправке заказа в Кассу я хотел, чтобы заказ появлялся на экранах Кухни

Опять же, благодаря вам,

Вы выполнили задачу и предоставили мне новую версию системы и добавили лишний шаг в рабочий процесс

MakeOrder (модель OrderDetails)

SendOrderToCashier (модель OrderDetails)

SendOrderToScreen(модель OrderDetails, номер экрана)

Опять же благодаря вам рейт клиентов увеличивается, вроде заказ на экране опаздывает на 10 миллисекунд но ничего страшного, никто не пострадал.

У меня есть только одна проблема, я думаю, один из поваров ворует помидоры в кармане своего фартука. Поэтому мне нужно, чтобы тот же заказ в рабочем процессе был отправлен мне как владельцу, чтобы проверить детали заказа и подсчитать использованные помидоры.

и вы добавили в рабочий процесс

MakeOrder (модель OrderDetails)

SendOrderToCashier (модель OrderDetails)

SendOrderToScreen(модель OrderDetails, номер экрана)

SendOrderToOwners (модель OrderDetails, OwnerIds)

Благодаря вам теперь я могу отслеживать, сколько помидоров используется, и шеф-повар больше не берет помидоры, но владельцы теперь получают уведомление через секунду после того, как заказ сделан, опять же, меня это не задевает, но нам нужно немного ускорить процесс в следующий раз, так как моя следующая функция — это новая система инвентаря.

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

Мне нужна новая функция для вычета компонентов после того, как заказ сделан.

Итак, вы добавили еще один шаг в рабочий процесс.

MakeOrder (модель OrderDetails)

SendOrderToCashier (модель OrderDetails)

SendOrderToScreen(модель OrderDetails, номер экрана)

SendOrderToOwners (модель OrderDetails, OwnerIds)

DeductFromInventory (модель OrderDetails)

Спасибо, система инвентаризации теперь работает отлично, но после увеличения количества клиентов у нас возникла проблема, нам нужно изменить последовательность и сделать приоритетом интеграцию инвентаря, чтобы мы могли следить за отсутствием компонента без каких-либо проблем. задержки.

MakeOrder (модель OrderDetails)

DeductFromInventory (модель OrderDetails)

SendOrderToCashier (модель OrderDetails)

SendOrderToScreen(модель OrderDetails, номер экрана)

SendOrderToOwners (модель OrderDetails, OwnerIds)

Поэтому мы изменили последовательность и добавили метод Deduct сразу после метода MakeOrder.

Интеграция инвентаризации позвонила нам и сообщила, что у них есть ошибка, которая будет обновлена ​​​​через час или два, и после нашего последнего изменения метод Deduct выдает исключение, и в результате все методы в рабочем процессе не выполняются, сейчас все операции остановились, и мы теряем деньги.

Теперь вы слышали о системах, управляемых событиями, и решили преобразовать рабочий процесс в систему, управляемую событиями. Что это?

Заказы теперь публикуются в системе очередей с той же моделью OrderDetails плюс новый статус для заинтересованных сторон, которым является сам статус заказа (Подготовка, Доставка, ReadyToServe, Обслужено, Отменено, Удалено, Заказ создан)

и рабочий процесс теперь имеет только один метод, который

MakeOrder (модель OrderDetails)

и вы добавили в реализацию еще 1 шаг для публикации в очередь со статусом OrderCreated

затем вы удалили остальные рабочие процессы и создали еще несколько автономных микросервисов: один для шеф-поваров для обновления экрана, один для владельцев, один для кассира и еще один для интеграции инвентаря.

Их мы можем считать нашими заинтересованными сторонами, а первым микросервисом был сам заказ.

Давайте резюмируем здесь.

Теперь у нас есть микросервисы

ЗаказыMicroservice:-

— — — — — —MakeOrder (модель OrderDetails)

CashierMicroservice: –

— — — — — — UpdateCashierSystem()

ChefsMicroservice:-

— — — — — — UpdateChefsScreen()

ВладельцыMicroservice:-

— — — — — — Уведомить владельцев()

InventoryIntegration: –

— — — — — — ВычестьКомпоненты()

Теперь заинтересованные стороны (все микросервисы, кроме OrdersMicroservice) будут подписываться на очередь заказов, а описанные выше методы будут запускаться после создания заказа, параллельно друг другу, ничто из них не прерывается. во-вторых, задержка теперь составляет 0 миллисекунд, никаких зависимостей, поэтому всякий раз, когда микрослужба перестает работать, другие не будут затронуты и будут отлично работать.

Теперь я собираюсь попросить вас о последней услуге, мне нужна новая функция, всякий раз, когда заказ закончен, повара на кухне нажимают кнопку, чтобы либо отметить заказ как выполненный, либо в рецепте чего-то не хватает, и клиент получает это уведомление

Теперь у вас есть представление о микросервисах и архитектуре, управляемой событиями,

Как вы собираетесь это реализовать?

Вернитесь к микросервисам, найдите минутку и проверьте, где и что вы собираетесь внедрять

Решение:-

Внутри ChefsMicroservice мы создадим новый метод UpdateOrderStatus.

и публиковать статус в очередь, и теперь оповещать можно всех желающих, а не только клиентов.

Архитектура, управляемая событиями, используемая для отделения служб друг от друга и обычно используемая с микрослужбами, как мы уже обсуждали, любое событие — это изменение состояния, и любое изменение запускает другие методы для связи и обновления.

Теперь подумайте о своем проекте, текущем или предстоящем, и подумайте нестандартно, какие сервисы можно разделить с помощью микросервисов и архитектуры, управляемой событиями.