Dead letter-köer och återförsöksstrategier
Lär er att hantera meddelanden som inte kan bearbetas med återförsök och backoff, gränser för återleverans och dead letter-köer för att hålla asynkrona pipelines tillförlitliga.
Dead letter-köer och återförsöksstrategier är en gratis lektion i API-begränsning och skalbarhetsmönster på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för API-begränsning och skalbarhetsmönster, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i API-begränsning och skalbarhetsmönster innehåller totalt 4 lektioner.
När meddelanden misslyckas
I en asynkron pipeline kan en konsument misslyckas med att bearbeta ett meddelande — på grund av en bugg, felaktiga data eller ett avbrott i ett nedströmsberoende. Utan en plan kan meddelandet blockera kön eller gå förlorat.
Den här lektionen behandlar omförsök och dead letter queue.
Bekräftelser
En konsument ackar ett meddelande för att bekräfta att bearbetningen lyckades. Om den nackar (eller aldrig ackar) kan meddelandeförmedlaren leverera det igen.
Om du ackar innan arbetet är utfört riskerar meddelandet att gå förlorat; acka först efter ett lyckat resultat.
msg = queue.receive()
process(msg)
msg.ack() # only after successNaiva omförsök är farliga
Om ett misslyckat meddelande bearbetas igen direkt kan det skapa en tät loop som överbelastar en redan kämpande tjänst nedströms — ett självförvållat avbrott.
Du behöver en fördröjning och en gräns.
Exponentiell backoff
Vänta längre efter varje misslyckat försök: 1s, 2s, 4s, 8s. Då får ett tillfälligt problem tid att återhämta sig i stället för att överbelastas.
def delay(attempt):
return min(2 ** attempt, 60)Jitter
Om många konsumenter använder samma backoff-schema försöker de igen samtidigt — en thundering herd. Lägg till slumpmässig jitter för att sprida ut omförsöken.
import random
def delay(attempt):
base = min(2 ** attempt, 60)
return base / 2 + random.uniform(0, base / 2)Maximalt antal omförsök
Vissa fel går aldrig över — ett felaktigt formaterat meddelande är poison. Sluta försöka efter ett fast antal försök och flytta undan meddelandet.
Dead letter queue
En dead letter queue (DLQ) är en separat kö dit meddelanden flyttas när alla omförsök har förbrukats. Huvudpipelinen kan fortsätta medan felen isoleras för granskning.
if msg.attempts >= MAX_RETRIES:
dlq.send(msg)
else:
requeue(msg, delay(msg.attempts))Inspektera DLQ
DLQ:n är din yta för felsökning. Utvecklare granskar misslyckade meddelanden, hittar grundorsaken, korrigerar kod eller data och spelar sedan upp dem i huvudkön igen.
Idempotenta konsumenter
Omförsök innebär att ett meddelande kan bearbetas mer än en gång. Gör hanterarna idempotenta — samma meddelande ska ge samma resultat även om det bearbetas två gånger, till exempel genom att spåra bearbetade meddelande-ID:n.
if seen.contains(msg.id):
msg.ack() # already handled
else:
process(msg)
seen.add(msg.id)Aviseringar för DLQ
En växande DLQ är ett tecken på att något är fel. Skicka en avisering när dess storlek överskrider ett tröskelvärde, så att felen får mänsklig uppmärksamhet innan de hopar sig.
Mönster för poison-meddelanden
Vissa fel upprepas oavsett hur många gånger du försöker igen — till exempel felaktigt formaterade data eller en post som saknas. Upptäck dessa tidigt genom att granska feltypen: skicka deterministiska, icke-tillfälliga fel direkt till DLQ:n i stället för att slösa omförsök.
if is_permanent(error):
dlq.send(msg) # no point retrying
else:
requeue(msg, delay(msg.attempts))Snabbtest
Testa dina kunskaper om felhantering.
Sammanfattning
Du har lärt dig att hantera meddelandefel:
- Acka efter lyckad bearbetning, nacka för att leverera igen
- Exponentiell backoff med jitter sprider ut omförsöken
- En omförsöksgräns skyddar mot poison-meddelanden
- En DLQ isolerar fel för granskning och uppspelning
- Gör konsumenterna idempotenta
Lär dig API-begränsning och skalbarhetsmönster med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Dead letter-köer och återförsöksstrategier” gratis?
Ja – hela texten till ”Dead letter-köer och återförsöksstrategier” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i API-begränsning och skalbarhetsmönster, kan Ni uppgradera till CoddyKit PRO. Kursen i API-begränsning och skalbarhetsmönster innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dead letter-köer och återförsöksstrategier”?
Lär er att hantera meddelanden som inte kan bearbetas med återförsök och backoff, gränser för återleverans och dead letter-köer för att hålla asynkrona pipelines tillförlitliga. Ni övar på API-begränsning och skalbarhetsmönster med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig API-begränsning och skalbarhetsmönster?
Du behöver inga förkunskaper. Utbildningen i API-begränsning och skalbarhetsmönster på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Dead letter-köer och återförsöksstrategier”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här API-begränsning och skalbarhetsmönster-lektionen?
Ja. Varje API-begränsning och skalbarhetsmönster-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Introduktion till asynkrona API:er
- Grunderna i meddelandeköer
- Implementering av bakgrundsuppgifter
- Dead letter-köer och återförsöksstrategier