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