0Pricing
RabbitMQ Messaging & Async Systems · Lección

El patrón Outbox para una publicación fiable

Aprenda el patrón transactional outbox para confirmar atómicamente el estado de negocio y los mensajes salientes, eliminando el problema de las escrituras duales en sistemas basados en eventos.

El patrón Outbox para una publicación fiable es una lección gratuita de RabbitMQ Messaging & Async Systems 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 RabbitMQ Messaging & Async Systems, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de RabbitMQ Messaging & Async Systems incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

The Dual-Write Problem

Saving to a database and publishing to RabbitMQ are two separate operations. If one succeeds and the other fails, your state and your events drift apart.

This is the dual-write problem.

What Is the Outbox Pattern?

The outbox pattern writes the business change and the outgoing message into the same database transaction, then publishes the message asynchronously from the outbox table.

The Outbox Table

Create a table that stores pending messages alongside your domain data.

CREATE TABLE outbox (
  id UUID PRIMARY KEY,
  payload JSONB,
  published BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMPTZ DEFAULT now()
);

Atomic Write

In one transaction, update the business row and insert the outbox row. Either both commit or neither does.

BEGIN;
INSERT INTO orders (id, status) VALUES ('42', 'paid');
INSERT INTO outbox (id, payload) VALUES (gen_random_uuid(), '{"order":"42"}');
COMMIT;

The Relay Process

A separate relay (or message dispatcher) polls the outbox for unpublished rows, publishes them to RabbitMQ, and marks them published.

Polling the Outbox

The relay selects pending rows in order and publishes each one.

SELECT id, payload FROM outbox WHERE published = FALSE ORDER BY created_at;

At-Least-Once Delivery

If the relay crashes after publishing but before marking the row, it republishes on restart. So consumers must be idempotent to tolerate duplicates.

Change Data Capture Alternative

Instead of polling, tools like Debezium tail the database write-ahead log and stream outbox inserts to RabbitMQ, reducing latency and load.

Combining With Confirms

The relay should use publisher confirms so it only marks a row published after the broker acknowledges the message, closing the loss window.

Outbox vs Saga

The outbox guarantees a single service reliably emits its events. A saga coordinates a multi-service workflow. They complement each other: each saga step can publish via its own outbox.

Cleanup and Retention

  • Periodically delete or archive published rows
  • Index on published for fast polling
  • Monitor relay lag to catch stalls early

Quick Check

Test your outbox understanding.

Recap

The outbox pattern stores outgoing messages in the same transaction as business data, then a relay publishes them to RabbitMQ asynchronously.

It eliminates the dual-write problem, requires idempotent consumers due to at-least-once delivery, and pairs well with publisher confirms and sagas.

Preguntas frecuentes

¿La lección «El patrón Outbox para una publicación fiable» es gratis?

Sí — el texto completo de «El patrón Outbox para una publicación fiable» 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 RabbitMQ Messaging & Async Systems, actualiza a CoddyKit PRO. El curso de RabbitMQ Messaging & Async Systems incluye 4 lecciones en total.

¿Qué aprenderé en «El patrón Outbox para una publicación fiable»?

Aprenda el patrón transactional outbox para confirmar atómicamente el estado de negocio y los mensajes salientes, eliminando el problema de las escrituras duales en sistemas basados en eventos. Practicas RabbitMQ Messaging & Async Systems 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 RabbitMQ Messaging & Async Systems?

No se requiere experiencia previa. RabbitMQ Messaging & Async Systems 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 «El patrón Outbox para una publicación fiable»?

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 RabbitMQ Messaging & Async Systems?

Sí. Cada lección de RabbitMQ Messaging & Async Systems 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

  1. Idempotencia en el procesamiento de mensajes
  2. Patrón Saga con RabbitMQ
  3. Segregación de responsabilidades de comandos y consultas (CQRS)
  4. El patrón Outbox para una publicación fiable
← Volver a RabbitMQ Messaging & Async Systems