feat(outbox): attempt cap → DLQ + admin endpoint + 6 unit-тестов
После N (default 1000) неудачных попыток публикации событие маркируется
dlq_at и исключается из polling. Без cap poller бесконечно ретраил мёртвые
сообщения (orphan topic, ACL deny), забивая логи и lag-метрику.
- 0011-outbox-dlq.xml: dlq_at column + перестроенный idx_outbox_unpublished
(исключает DLQ) + idx_outbox_dlq для admin-листинга.
- OutboxPoller: ordinis.outbox.attempt-max (default 1000), markDlq() при
достижении cap, новый counter ordinis_outbox_dlq_total.
- OutboxLagGauge: ordinis_outbox_dlq_size gauge — алерт на > 0.
- OutboxEventRepository: countPending() (без DLQ), findByDlqAtIsNotNull(Pageable).
- OutboxAdminController: GET /admin/outbox/{stats,dlq} для UI.
- 6 unit-тестов через mock-maker-subclass (JDK 25 ломает Mockito inline).
This commit is contained in:
@@ -57,6 +57,20 @@ ordinis:
|
||||
enabled: ${ORDINIS_OUTBOX_ENABLED:true}
|
||||
poll-interval-ms: ${ORDINIS_OUTBOX_POLL_INTERVAL_MS:1000}
|
||||
batch-size: ${ORDINIS_OUTBOX_BATCH_SIZE:100}
|
||||
# Cap на ретраи: после N попыток событие → DLQ (dlq_at), poller его пропускает.
|
||||
# 1000 при poll=1s ≈ ~17 минут активных ошибок (или быстрее на fail-fast топиках).
|
||||
attempt-max: ${ORDINIS_OUTBOX_ATTEMPT_MAX:1000}
|
||||
|
||||
springdoc:
|
||||
api-docs:
|
||||
path: /v3/api-docs
|
||||
swagger-ui:
|
||||
path: /swagger-ui.html
|
||||
operations-sorter: method
|
||||
tags-sorter: alpha
|
||||
display-request-duration: true
|
||||
show-actuator: false
|
||||
packages-to-scan: cloud.nstart.terravault.ordinis.restapi.web
|
||||
|
||||
---
|
||||
# DEV profile: подключается к cluster PG+Kafka через kubectl port-forward.
|
||||
|
||||
Reference in New Issue
Block a user