Pola Outbox untuk Publikasi yang Andal
Pelajari pola outbox transaksional untuk melakukan commit atomik pada keadaan bisnis dan pesan keluar, sehingga menghilangkan masalah penulisan ganda dalam sistem berbasis peristiwa.
Pola Outbox untuk Publikasi yang Andal adalah pelajaran RabbitMQ Messaging & Async Systems gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar RabbitMQ Messaging & Async Systems, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus RabbitMQ Messaging & Async Systems mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
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
publishedfor 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.
Belajar RabbitMQ Messaging & Async Systems dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 11
- Pelajaran
- 44
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Outbox untuk Publikasi yang Andal” gratis?
Ya — teks lengkap “Pola Outbox untuk Publikasi yang Andal” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus RabbitMQ Messaging & Async Systems, upgrade ke CoddyKit PRO. Kursus RabbitMQ Messaging & Async Systems mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Outbox untuk Publikasi yang Andal”?
Pelajari pola outbox transaksional untuk melakukan commit atomik pada keadaan bisnis dan pesan keluar, sehingga menghilangkan masalah penulisan ganda dalam sistem berbasis peristiwa. Kamu berlatih RabbitMQ Messaging & Async Systems dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai RabbitMQ Messaging & Async Systems?
Tidak diperlukan pengalaman sebelumnya. RabbitMQ Messaging & Async Systems di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pola Outbox untuk Publikasi yang Andal” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran RabbitMQ Messaging & Async Systems ini?
Ya. Setiap pelajaran RabbitMQ Messaging & Async Systems menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Idempotensi dalam Pemrosesan Pesan
- Pola Saga dengan RabbitMQ
- Pemisahan Tanggung Jawab Perintah-Kueri (CQRS)
- Pola Outbox untuk Publikasi yang Andal