0Pricing
RabbitMQ Messaging & Async Systems · Aula

O padrão Outbox para publicação confiável

Aprenda o padrão outbox transacional para confirmar atomicamente o estado do negócio e as mensagens de saída, eliminando o problema de dupla escrita em sistemas orientados a eventos.

O padrão Outbox para publicação confiável é uma aula grátis de RabbitMQ Messaging & Async Systems no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de RabbitMQ Messaging & Async Systems, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de RabbitMQ Messaging & Async Systems inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em 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.

Perguntas Frequentes

A aula “O padrão Outbox para publicação confiável” é grátis?

Sim — o texto completo de “O padrão Outbox para publicação confiável” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de RabbitMQ Messaging & Async Systems, atualize para CoddyKit PRO. O curso de RabbitMQ Messaging & Async Systems inclui 4 aulas no total.

O que vou aprender em “O padrão Outbox para publicação confiável”?

Aprenda o padrão outbox transacional para confirmar atomicamente o estado do negócio e as mensagens de saída, eliminando o problema de dupla escrita em sistemas orientados a eventos. Você pratica RabbitMQ Messaging & Async Systems com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar RabbitMQ Messaging & Async Systems?

Nenhuma experiência prévia é necessária. RabbitMQ Messaging & Async Systems no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “O padrão Outbox para publicação confiável”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de RabbitMQ Messaging & Async Systems?

Sim. Cada aula de RabbitMQ Messaging & Async Systems inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Idempotência no processamento de mensagens
  2. Padrão Saga com RabbitMQ
  3. Segregação de responsabilidades entre comandos e consultas (CQRS)
  4. O padrão Outbox para publicação confiável
← Voltar para RabbitMQ Messaging & Async Systems