Idempotencia y deduplicación de mensajes
Haga que las operaciones de microservicios sean seguras al reintentarlas mediante controladores idempotentes y la deduplicación de mensajes en sistemas distribuidos.
Idempotencia y deduplicación de mensajes es una lección gratuita de Microservices Communication Patterns (Saga, Circuit Breaker) en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Microservices Communication Patterns (Saga, Circuit Breaker), y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Microservices Communication Patterns (Saga, Circuit Breaker) incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Retries Cause Duplicates
Distributed systems deliver messages at least once. A timeout or retry can make the same request arrive twice — and charge a card or create an order twice.
What Idempotency Means
An operation is idempotent if doing it many times has the same effect as doing it once. Repeating it changes nothing beyond the first application.
Naturally Idempotent Operations
Some operations are idempotent by nature — absolute SET, HTTP PUT and DELETE. Others, like balance = balance + 10, double-apply on a retry.
The Idempotency Key
The standard fix is an idempotency key: the client generates a unique id per operation and resends it on every retry, so the server processes it only once.
POST /payments
Idempotency-Key: 9f1c-7a22-...
{ "amount": 4999 }Storing Processed Keys
The server records each processed key. If the same key reappears, it returns the stored result instead of re-running the work.
if (store.exists(key)) return store.result(key);
Result r = process(request);
store.save(key, r);
return r;Deduplication at the Consumer
For queues, the consumer does deduplication: it tracks message ids it has already handled and silently skips any repeats.
if (seen.contains(msg.id())) { ack(msg); return; }
handle(msg);
seen.add(msg.id());
ack(msg);Atomicity Matters
Recording the key and doing the work must be atomic. If they are separate, a crash between them reopens the duplicate window — use a transaction or unique constraint.
INSERT INTO processed(key) VALUES (?) -- unique constraint
-- if it fails, the work already ranExpiring the Dedup Store
You cannot store keys forever. Give the dedup store a TTL sized to your max retry window — Redis with expiry is a common choice.
redis.set("idem:" + key, result, "EX", 86400, "NX");Idempotency vs Exactly-Once
True exactly-once delivery is extremely hard. The practical pattern is at-least-once delivery plus idempotent processing, giving effectively-once behavior.
Designing Idempotent Events
Make event handlers idempotent: include a unique event id, prefer absolute state changes, and guard side effects so a redelivered event never repeats them.
Where to Apply It
Apply idempotency at every retry boundary — API gateways, queue consumers, saga steps, webhooks. Anywhere a message can arrive twice needs a dedup strategy.
Quick Check
The same message just arrived twice — does your design still do the right thing? Check your idempotency grasp.
Recap
You made operations retry-safe: at-least-once causes duplicates, idempotent operations repeat harmlessly, use keys and dedup, keep record-and-process atomic with a TTL.
Preguntas frecuentes
¿La lección «Idempotencia y deduplicación de mensajes» es gratis?
Sí — el texto completo de «Idempotencia y deduplicación de mensajes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Microservices Communication Patterns (Saga, Circuit Breaker), actualiza a CoddyKit PRO. El curso de Microservices Communication Patterns (Saga, Circuit Breaker) incluye 4 lecciones en total.
¿Qué aprenderé en «Idempotencia y deduplicación de mensajes»?
Haga que las operaciones de microservicios sean seguras al reintentarlas mediante controladores idempotentes y la deduplicación de mensajes en sistemas distribuidos. Practicas Microservices Communication Patterns (Saga, Circuit Breaker) con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Microservices Communication Patterns (Saga, Circuit Breaker)?
No se requiere experiencia previa. Microservices Communication Patterns (Saga, Circuit Breaker) en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Idempotencia y deduplicación de mensajes»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Microservices Communication Patterns (Saga, Circuit Breaker)?
Sí. Cada lección de Microservices Communication Patterns (Saga, Circuit Breaker) incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Comunicación síncrona frente a asíncrona
- Desafíos de los sistemas distribuidos
- API Gateway y descubrimiento de servicios
- Idempotencia y deduplicación de mensajes