Задание
|
Предыдущий урок
Видеоурок
|
2 из 3 уроков
Необходимо выполнить задание
|
Следующий урок
Оценка качества проверки ДЗ
|
Время выполнения задания: ~1.5 часа
Сложность: ⭐️⭐️⭐️⭐️ (максимум ⭐️⭐️⭐️⭐️⭐️)
Бонусы: 400
На вашем счету сейчас: 1 бонуса/ов
❗ Важно
В 12 модуле немного была изменена реализация, которая была показана в 11ом:
- Kafka Producer стал синхронным, чтобы отправлять по 1 сообщению и получать ошибку в случае недоступности Kafka
- В Domain Event все поля стали публичными (экспортируемыми). Это нужно чтобы работала сериализация/десериализация.
- В Domain Event поле Name заполняется через рефлексию, а не как константа
Общая схема
На рисунке показана общая схема системы
💎 Запустить инфраструктуру
Для того чтобы сервис работал, ему нужна база данных и прочие зависимости. Все эти зависимости запускаются в Docker и находятся в проекте Infrastructure.
Подтяните последнюю версию Infrastructure
- Если вы ранее не скачивали проект, то:
git clone https://gitlab.com/microarch-ru/ddd-in-practice/infrastructure.git
- А если скачивали, то просто обновите:
git pull https://gitlab.com/microarch-ru/ddd-in-practice/infrastructure.git
- Откройте терминал и перейдите в папку Infrastructure
- Выполните команду
docker-compose up
- Если ваш компьютер маломощный, то вы можете запускать инфраструктурные системы выборочно. Оставьте в команде, только нужные системы:
docker-compose up postgres kafka init-kafka kowl geo notification discount backoffice basket
💎 Подготовка к заданию
Установите в проект следующие пакеты:
go get github.com/robfig/cron/v3
Задание
Легенда
Вы отвечаете за разработку микросервиса Delivery (доставка)
Подготовка
- Вы работаете в своём Git репозитории "delivery"
- Создайте ветку module-12
- Выполните задание в ней
Задача
Сервис Delivery уже отправляет сообщения через Kafka в микросервис Notification при завершении заказа. Но способ отправки сейчас неоптимальный, есть риск потери сообщений в случае сбоя.
Реализуйте паттерн Outbox в сервисе Delivery по аналогии с Basket.
После реализации
- Скомпилируйте и запустите проект
- Создайте заказ через корзину или тестовый метод Delivery ([POST] /order)
- Убедитесь, что сообщения сохраняются в таблице Outbox
- Убедитесь, что Job считывает сообщения из таблицы Outbox и отправляет в MediatR (или вашу Pub/Sub реализацию)
- Убедитесь, что сообщения приходят в Domain Event Handler'ы
- Убедитесь, что сообщения отправляются в Kafka. Посмотреть на топики и их сообщения можно в утилите Kowl (http://localhost:8087)
Критерии оценивания
- Приложение компилируется
- Domain Event сохраняются в таблицу Outbox
- Delivery сервис отправляет нотификации в Kafka
По любым вопросам обращайтесь в комментариях к уроку или в Telegram
Если вы обнаружили ошибку или неточность в данном уроке, сообщите о ней в комментариях к данному уроку. Это поможет сделать курс лучше.