b5990a55ac
- добавить properties и config values для route passport outbox worker - включить Spring scheduling в route-processing service - добавить транзакционный сервис claim и status transitions для outbox - публиковать claimed outbox rows через существующий Kafka publisher - обрабатывать publish failures по каждой row с bounded exponential backoff - обеспечить безопасность при нескольких pod через FOR UPDATE SKIP LOCKED и lockedUntil - добавить unit tests для claim, publish transitions, retry/fail behavior и batch-обработки worker
route-passport-kafka-consumer
Минимальный сервис на Kotlin + Spring Boot, который:
- слушает Kafka topic;
- получает в сообщении JSON паспорта маршрута;
- парсит JSON в DTO;
- больше ничего не делает.
Что внутри
RoutePassportConsumerApplication— точка входа Spring Boot.RoutePassportMessageListener— Kafka listener.RoutePassportJsonParserService— сервис парсинга входного JSON в DTO.RoutePassportDto— итоговый DTO изpcp-types-lib.RawPassportEnvelopeDtoи связанныеRaw*DTO — модель входного JSON изpcp-types-lib.
Как запустить
- Поднять Kafka.
- Указать адрес брокера в
application.ymlили через переменную окруженияKAFKA_BOOTSTRAP_SERVERS. - При необходимости указать topic через
APP_KAFKA_TOPIC. - Запустить приложение:
./gradlew bootRun
Сообщение, которое ожидает сервис
Сервис ожидает, что value Kafka-сообщения — это JSON того же формата, что и src/test/resources/passport_example.json.
Поле geometry должно приходить строкой в формате WKT.
Примечание
Поскольку в запросе был указан просто «слушает очередь», реализация сделана через Kafka topic как наиболее типичный вариант для стека Kotlin + Spring и Kafka-ориентированного сервиса.