pcp-request-service: аудит-фиксы RS1/RS3/RS6/RS7

RS1 (#29): планировщик истечения заявок — RequestExpiryService
(@Scheduled + FOR UPDATE SKIP LOCKED, мультиинстанс-safe), refreshStatus
вызывается и при создании заявки.
RS7 (#35): единый топик pcp.request.status.v1 → geoportal (COMPLETED/EXPIRED
в payload), замена orphan pcp.request.completed.v1; эмиссия из matching и
expiry через тот же outbox; backoff/next_attempt_at/cap для outbox FAILED.
RS3 (#31): DefaultErrorHandler + DeadLetterPublishingRecoverer
(DLQ pcp.route.georeference-dlq.v1), bounded retry, контрактные ошибки в DLQ.
RS6 (#34): проброс coverageRequiredPercent из API, разведение терминов
покрытие/важность.

Доки: бэклог, аудит сервиса заданий, карты взаимодействий.
RS2 (#30) отложено до #28, RS5 (#33) — до роста требований к точности.
This commit is contained in:
Дмитрий Соловьев
2026-06-06 23:47:19 +03:00
parent 2499aebf2d
commit c1259c3105
33 changed files with 1600 additions and 139 deletions
+16 -5
View File
@@ -3,9 +3,18 @@ server:
pcp:
outbox:
request-completed-topic: pcp.request.completed.v1
request-status-topic: pcp.request.status.v1
publish-batch-size: 50
publish-fixed-delay-ms: 5000
max-attempts: 10
initial-backoff-ms: 1000
max-backoff-ms: 60000
request:
expiry:
enabled: true
fixed-delay-ms: 60000
batch-size: 200
max-batches-per-run: 50
spring:
boot:
@@ -60,10 +69,12 @@ logging:
app:
kafka:
topics:
request: pcp.request.in.v1
route: pcp.route.georeference.v1
request:
cleanup-retention-days: 30
cleanup-cron: "0 0 3 * * *"
consumer:
route:
dlq-topic: pcp.route.georeference-dlq.v1
max-attempts: 5
backoff-ms: 1000
max-backoff-ms: 30000
grid:
enabled: true