Čá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.

  1. Zpráva
  2. Službapřijala
  3. Pád procesu
  4. 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

  1. inbox/čeká
  2. processing/zpracovává se
  3. done/potvrzeno

Chyba

  1. processing/chyba
  2. čekej a zkus znovuretry s backoffem
  3. 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í