Интеграция с 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. Схематично весь цикл от создания заказа до обновления его статуса можно описать следующим образом: kafka integration
  1. Orders Service транзакционно сохраняет данные в таблицы orders и orders_outbox.
  2. Kafka Connect с помощью Debezium Postgres Connector вычитывает данные из orders_outbox.
  3. Конвертер внутреннего продъюсера в Kafka Connect при первой отправке данных в Kafka пытается получить схему данных для топика из Confluent Schema Registry, но так как ее еще нет, он автоматически регистрирует ее и сохраняет у себя локально в кеше, чтобы в дальнейшем не обращаться каждый раз в Schema Registry.
  4. Сообщение о создании заказа отправляется в Kafka.
  5. Dispatcher Service вычитывает сообщение о создании заказа из Kafka.
  6. Десериализатор консьюмера в Dispatcher Service при получении первого сообщения еще не имеет схемы данных, поэтому получает ее из Schema Registry и сохраняет локально в кеше. Далее происходит обработка заказа.
  7. Сериализатор продъюсера в Dispatcher Service при первой отправке сообщения об обработке заказа регистрирует его схему и сохраняет ее локально в кеше.
  8. Продъюсер Dispatcher Service отправляет сообщение об обработке заказа в Kafka.
  9. Консьюмер Orders Service получает сообщение об обработке заказа из Kafka.
  10. Десериализатор консьюмера Orders Service при получении первого сообщения еще не имеет схемы данных, поэтому запрашивает ее в Schema Registry и сохраняет локально в кеше.
  11. Orders Service обновляет статус заказа на основе сообщения об обработке заказа, полученного из Kafka.

Ошибка приложения

200 OK

Ошибка приложения