Интеграция с Kafka II. Dispatcher Service
В этом уроке мы продолжаем интеграцию микросервисов с брокером сообщений Apache Kafka.
На данный момент сообщения о создании заказа в Orders Service отправляются в топик Kafka
Ошибка приложения
v1.public.orders_outbox
с помощью Kafka Connect и Debezium
Postgres Connector. При отправке первого сообщения коннектор регистрирует его схему в реестре Confluent Schema Registry, который запущен как отдельный сервис в Docker.
Нам предстоит реализовать логику сервиса Dispatcher Service, ответственного за обработку заказов пользователя. В текущем курсе эта логика будет минимальна - заказы с
четным ID будут одобрены, с нечетным - нет. Главное в этом уроке - настройка интеграции с Kafka: Dispatcher Service должен вычитывать сообщение
AvroOrderPlacedEvent
из топика v1.public.orders_outbox
, обрабатывать заказ и отправлять OrderDispatchedEvent
в топик
v1.orders_dispatch
. При отправке также необходимо зарегистрировать схему сообщения в Confluent Schema Registry.
Orders Service в свою очередь получит это сообщение и обновит статус MenuOrder
в Postgres. Схематично весь цикл от создания заказа до обновления его
статуса можно
описать следующим образом:
- Orders Service транзакционно сохраняет данные в таблицы
orders
иorders_outbox
. - Kafka Connect с помощью Debezium Postgres Connector вычитывает данные из
orders_outbox
. - Конвертер внутреннего продъюсера в Kafka Connect при первой отправке данных в Kafka пытается получить схему данных для топика из Confluent Schema Registry, но так как ее еще нет, он автоматически регистрирует ее и сохраняет у себя локально в кеше, чтобы в дальнейшем не обращаться каждый раз в Schema Registry.
- Сообщение о создании заказа отправляется в Kafka.
- Dispatcher Service вычитывает сообщение о создании заказа из Kafka.
- Десериализатор консьюмера в Dispatcher Service при получении первого сообщения еще не имеет схемы данных, поэтому получает ее из Schema Registry и сохраняет локально в кеше. Далее происходит обработка заказа.
- Сериализатор продъюсера в Dispatcher Service при первой отправке сообщения об обработке заказа регистрирует его схему и сохраняет ее локально в кеше.
- Продъюсер Dispatcher Service отправляет сообщение об обработке заказа в Kafka.
- Консьюмер Orders Service получает сообщение об обработке заказа из Kafka.
- Десериализатор консьюмера Orders Service при получении первого сообщения еще не имеет схемы данных, поэтому запрашивает ее в Schema Registry и сохраняет локально в кеше.
- Orders Service обновляет статус заказа на основе сообщения об обработке заказа, полученного из Kafka.
200 OK