улучшить observability и документацию outbox

- обновить README с текущим Kafka, DB, outbox и scaling flow
- расширить логи listener, ingestion, publisher и outbox worker
- не логировать raw payload и outbox payload
- закрыть test controller явным property
- добавить Micrometer counters для ingestion и outbox outcomes
- сохранить listener flow, payload contract и delivery semantics без изменений
This commit is contained in:
Дмитрий Соловьев
2026-05-25 15:20:25 +03:00
parent 4073897efc
commit fa357a78b4
10 changed files with 306 additions and 65 deletions
@@ -1,5 +1,6 @@
package space.nstart.pcp.routepassportconsumer.listener
import io.micrometer.core.instrument.simple.SimpleMeterRegistry
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.junit.jupiter.api.Assertions.assertThrows
import org.junit.jupiter.api.Test
@@ -18,6 +19,7 @@ import space.nstart.pcp.pcp_types_lib.dto.routes.RoutePassportMessageMetadata
import space.nstart.pcp.routepassportconsumer.config.KafkaTopicsProperties
import space.nstart.pcp.routepassportconsumer.service.RoutePassportIngestionService
import space.nstart.pcp.routepassportconsumer.service.RoutePassportJsonParserService
import space.nstart.pcp.routepassportconsumer.service.RoutePassportMetrics
import space.nstart.pcp.routepassportconsumer.service.RoutePassportSourceRecordMetadata
import java.math.BigDecimal
import java.time.LocalDateTime
@@ -33,6 +35,7 @@ class RoutePassportMessageListenerTest {
val listener = RoutePassportMessageListener(
routePassportJsonParserService = parserService,
routePassportIngestionService = ingestionService,
routePassportMetrics = routePassportMetrics(),
kafkaTopicsProperties = kafkaTopicsProperties(),
)
val rawPayload = """{"id":"route-1"}"""
@@ -61,6 +64,7 @@ class RoutePassportMessageListenerTest {
val listener = RoutePassportMessageListener(
routePassportJsonParserService = parserService,
routePassportIngestionService = ingestionService,
routePassportMetrics = routePassportMetrics(),
kafkaTopicsProperties = kafkaTopicsProperties(),
)
val rawPayload = """{"id":"route-1"}"""
@@ -86,6 +90,7 @@ class RoutePassportMessageListenerTest {
val listener = RoutePassportMessageListener(
routePassportJsonParserService = parserService,
routePassportIngestionService = ingestionService,
routePassportMetrics = routePassportMetrics(),
kafkaTopicsProperties = kafkaTopicsProperties(),
)
val rawPayload = """{"id":"route-1"}"""
@@ -121,6 +126,9 @@ class RoutePassportMessageListenerTest {
routeGeoreference = "pcp.route.georeference.v1",
)
private fun routePassportMetrics(): RoutePassportMetrics =
RoutePassportMetrics(SimpleMeterRegistry())
private fun consumerRecord(rawPayload: String): ConsumerRecord<String, String> =
ConsumerRecord(
INPUT_TOPIC,
@@ -1,5 +1,6 @@
package space.nstart.pcp.routepassportconsumer.service
import io.micrometer.core.instrument.simple.SimpleMeterRegistry
import org.junit.jupiter.api.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyInt
@@ -170,6 +171,7 @@ class RoutePassportOutboxServiceTest {
RoutePassportOutboxService(
routePassportOutboxRepository = repository,
outboxProperties = properties,
routePassportMetrics = RoutePassportMetrics(SimpleMeterRegistry()),
)
private fun properties(