Webhook сервис, обеспечивающий возможность их создания, изменения, удаления. Указанные выше операции осуществляются с помощью json rest интерфейса. В качестве источчника событий выступает топик в Apache Kafka.
Проект содержит следующие артефакты:
- webhook-service - сам сервис вебхуков
- simple-http-event-consumer - json rest сервис, реализующий единственный post endpoint. Предназначен для тестирования отправки данных сервисом webhook-service
- simple-kafka-sender - сервис реализующий отправку сообщений с заданным интервалом в указанный топик. Сообщения представляют собой целый числа, монотонно возрастающие с шагом в 1. Предназначен для тестирования сервиса webhook-service
- docker-compose.yaml - файл конфигурации набора контейннеров для интеграционного тестирования
При реализации были использованы следующие основные библиотеки:
- zio
- zio-kafka
- tofu
- circe
- sttp
- tapir
- http4s
- doobie
- flyway
- zio-test
- cats
Сервис webhook-service реализован в виде json rest сервиса. Он предоставляет возможности по управлению вебхуками.
Внутренне помимо обработчика http запросов HttpService сервис содержит отдельный обработчик команд
SubscriptionHandler по управлению вебхуками. Команды представлены трейтом SubscriptionCommand, который
содержит варианты для создания вебхука Subscribe, удаления вебхука UnSubscribe и обновления Update.
Обработчик комманд SubscriptionHandler связан c обрабочиком http HttpService через компонент
SubscriptionQueue. В основе SubscriptionQueue лежит очередь queue из zio, позволяющая организовать
взаимодействие между HttpService и SubscriptionHandler. SubscriptionHandler с помощью модуля
WorkerFactory создает обработчик KafkaWorker, который с использованием zio-kafka создает ZStream
сообщений из заданного топика. Эти сообщения отправляются по указанному url с помощью модуля HookSender.
KafkaWorker обеспечивает семантику чтения at least once. HttpService также предоставляет OpenAPI документацию
по url /docs.
docker-compose.yaml позволяет осуществить интеграционное тестирование сервиса webhook-service. В рамки создаваемого им набора входят следующие сервисы:
- db - инстанс Postgres
- zookeeper - инстанс ZooKeeper
- kafka - инстанс Apache Kafka
- sender - инстанс сервиса simple-kafka-sender для записи в kafka потока событий
- consumer1 и consumer2 - инстансы simple-http-event-consumer для получения http колбэков
- webhook - инстанс webhook-service
Для тестирования модуля HttpService реализован набор тестов HttpServiceLogicSpec.
Для тестирования модуля AppConfig реализован набор тестов AppSettingsParsingSpec.
Для тестирования функционала обработки сообщений реализован набор тестов KafkaWorkerSpec