Část 04 z 16 · Den 1 · acknowledgement (ack)
Doručeno, ale nezpracováno
Problém a zkušenost
Doručeno ještě neznamená zpracováno
Služba zprávu přijme, spadne a nikdo neví, zda práce proběhla.
- Zpráva
- Službapřijala
- Pád procesu
- Práce?proběhla, nebo ne
Zkušenost z praxeKdy jste zjistili, že zpráva „odešla“, ale práce se neudělala?
TakeawayRozhodnutí „hotovo“ musí patřit až příjemci, který práci opravdu dokončil.
Více k tématu
Co to znamená
Potvrzení (ack) je signál od příjemce, že zprávu zpracoval a broker ji může smazat.
Proč to používáme
Bez potvrzení nevíme, zda se zpráva ztratila, nebo ji někdo zpracovává.
Kdy to dává smysl
U každého asynchronního odběratele.
Kde se to láme
- Potvrdit hned po přijetí, před zpracováním.
- Nikdy nepotvrdit a zpráva se zpracovává stále dokola.
- Nemít lhůtu, po které se zpráva vrátí do fronty.
Představme si
Customer Identity přijme zprávu, ale spadne dřív, než identitu založí. Pokud broker zprávu už smazal, identita nikdy nevznikne.
Doručení a zpracování jsou dvě různé události.
Princip, aplikace a cvičení
Potvrzujeme až po práci
Souborový broker ukáže, co se děje: zpráva je soubor, který putuje složkami. Potvrdíme až po zpracování.
Šťastná cesta
- inbox/čeká
- processing/zpracovává se
- done/potvrzeno
Chyba
- processing/chyba
- čekej a zkus znovuretry s backoffem
- dead/po vyčerpání pokusů (DLQ)
Trade-offPotvrzení po zpracování znamená, že se zpráva může zpracovat dvakrát. Řešíme to idempotencí v částech 09 a 10.
TakeawayZpráva se ztratit nesmí a trvalá chyba nesmí blokovat zbytek.
Více k tématu
Co to znamená
Broker, který ukládá zprávy jako soubory ve složkách, je názorný: vidíme, kde zpráva je. Principy retry, dead-letter a redrive jsou stejné i u skutečných brokerů. V labu je broker simulovaný v prohlížeči.
Proč to používáme
Chceme vidět, že se zpráva neztratila, a mít co dělat, když je „otrávená“.
Kdy to dává smysl
U každého odběratele s vedlejšími účinky.
Kde se to láme
- Retry bouře: všichni opakují naráz. Pomáhá jitter.
- Retry bez idempotence vyrobí duplicity.
- DLQ, na kterou se nikdo nedívá.
Představme si
Identita se nepodaří založit. Po třech pokusech skončí zpráva v dead/. Po opravě ji provoz pošle znovu (redrive).
Čas je často nejlevnější oprava a DLQ je upřímná.
Školení pro váš tým
Chcete školení pro svůj tým?
Školení vedeme na vašem kódu a vašem doménovém problému. Domluvíme rozsah, termín a formu.
Probrat školení →