Cesta jedné zprávy
Detail doručení jedné integrační zprávy – outbox, RabbitMQ, consumer, inbox – včetně toho, co se děje při chybách.
Na této stránce
Shrnutí: Zpráva má dvě „pojistky“: outbox u odesílatele (neztratí se) a inbox u příjemce (nezpracuje se dvakrát). Mezi nimi ji drží RabbitMQ.
Šťastná cesta
sequenceDiagram
autonumber
participant H1 as Handler odesílatele
participant OB as Outbox (DB odesílatele)
participant OP as OutboxProcessor
participant X as Exchange ReserveStockV1
participant Q as Fronta minishop.inventory
participant C as RabbitMqModuleConsumer
participant D as IntegrationMessageDispatcher
participant IB as Inbox (DB příjemce)
participant H2 as Handler příjemce
H1->>OB: INSERT (Kind = Integration, TraceParent)
OP->>OB: vybrat nezpracované
OP->>X: BasicPublish (persistent, hlavička traceparent)
X-->>OP: potvrzení brokeru (publisher confirm)
OP->>OB: ProcessedAtUtc = teď
X->>Q: kopie do každé navázané fronty
Q->>C: doručení
C->>D: DispatchAsync(zpráva, modul)
D->>IB: (MessageId, handler) už zpracováno?
D->>H2: HandleAsync – v transakci s inboxem
H2->>IB: COMMIT: změny + odškrtnutí
C->>Q: ack – zpráva z fronty pryč
Co když se něco pokazí
| Kde | Co se stane | Výsledek |
|---|---|---|
| Broker neběží při publish | výjimka IntegrationBusUnavailableException, zpráva zůstane v outboxu, nepočítá se jako pokus |
odejde, až broker naběhne |
| Pád odesílatele po publish, před označením | zpráva odejde znovu | inbox příjemce duplicitu přeskočí |
| Handler příjemce vyhodí výjimku | transakce se vrátí, nack + requeue po 2 s | zkouší se znovu (bez limitu) |
| Pád příjemce před ack | RabbitMQ zprávu doručí znovu (redelivered) |
inbox duplicitu přeskočí |
| Nečitelná zpráva (neznámý typ, vadný JSON) | nack bez requeue | zahozena, v logu varování |
| Doménový handler selže 5× | outbox přestane zkoušet (poison message) | čeká na člověka, /health po 5 min Degraded |
Kód
OutboxProcessor · RabbitMqIntegrationBus · RabbitMqQueueConsumer · IntegrationMessageDispatcher · InboxGuard · testy outboxu
Související
Outbox · Inbox · Broker · Observabilita