Я прохожу курс Apache Kafka for Event-Driven Spring Boot Microservices на платформе Udemy.com.
Моя цель - познакомиться с Apache Kafka поближе. Думаю, что может пригодиться по работе, так как на соседних проектах используется. Да и на собеседованиях часто спрашивают.
В разделах 1-5 (занятия №1-33) были рассмотрены теоретические аспекты брокера сообщений (иногда его ещё называют распределённым журналом сообщений) Apache Kafka. Также проводилась практическая работа с Kafka CLI (интерфейсом командной строки).
Разумеется, от этих уроков никаких записей кода не осталось 😉
В разделах 6-14 (занятия №34-101) был с нуля создан небольшой проект с микросервисной архитектурой (четыре микросервиса). Также в разделах 17-18 (занятия №128-144) были написаны интеграционные тесты для двух модулей, проверяющие работу Apache Kafka.
Модуль products-microservice
- это реализация продюсера (producer). Сервис принимает информацию о продукте (например,
iPhone 15) в формате JSON, обрабатывает, и отбрасывает информацию в брокер для дальнейшей обработки.
Модуль email-notification-microservice
- это реализация консьюмера (consumer). Сервис принимает новое сообщение от
брокера, немного обрабатывает и выводит в консоль.
Модуль core
- по сути, просто хранилище класса, объект которого мы обрабатываем, то есть отправляем из продюсера и принимаем
в консьюмере.
Модуль mockservice
был предоставлен преподавателем в готовом виде. Предназначен для проверки обработки исключений при
работе приложения. В зависимости от запроса, возвращает ResponseEntity со статусом либо 200, либо 500.
В разделах 15-16 (занятия №102-127) преподаватель предоставил уже готовые микросервисы. Я их немного подправила под свой code style + добавила Lombok.
Модуль transfer-service
- это реализация продюсера, который работает с двумя топиками: withdraw-money-topic
и
deposit-money-topic
.
Модули withdrawal-service
и deposit-service
- это реализации консьюмеров. Каждый из них получает и обрабатывает
сообщения от соответствующего топика. Идея преподавателя в том, чтобы оформить передачу сообщений в оба консьюмера
в рамках одной транзакции. То есть, сообщения должны быть переданы либо оба, либо ни одно из них.
Модуль core
- это хранилище двух классов, объекты которых мы отправляем из продюсера и принимаем в консьюмерах. Также
содержит объекты классов-исключений, повторяемого и неповторяемого.
Модуль mockservice
- это всё тот же сервис-заглушка для проверки обработки исключений. В зависимости от запроса,
возвращает ResponseEntity со статусом либо 200, либо 500.
Раздел 19, помеченный как аппендикс А 🙂, содержит подробную инструкцию по запуску Kafka-кластера с тремя брокерами в Docker-контейнере с помощью файла docker-compose.yml. Ох, и как же я пожалела, что не прошла эти уроки ранее, до начала работы с микросервисами! 🙁 Ведь всё это время я каждый раз запускала такой Kafka-кластер с командной строки! 😵💫