Güvenilir Yayınlama için Outbox Deseni
İş odaklı durumu ve giden iletileri atomik olarak işlemek, olay güdümlü sistemlerdeki çift yazma sorununu ortadan kaldırmak için işlemsel outbox desenini öğrenin.
Güvenilir Yayınlama için Outbox Deseni, CoddyKit'te ücretsiz bir RabbitMQ Messaging & Async Systems dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, RabbitMQ Messaging & Async Systems öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. RabbitMQ Messaging & Async Systems kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
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.
Sıkça Sorulan Sorular
“Güvenilir Yayınlama için Outbox Deseni” dersi ücretsiz mi?
Evet — “Güvenilir Yayınlama için Outbox Deseni” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve RabbitMQ Messaging & Async Systems kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. RabbitMQ Messaging & Async Systems kursu toplamda 4 dersten oluşur.
“Güvenilir Yayınlama için Outbox Deseni” dersinde ne öğreneceğim?
İş odaklı durumu ve giden iletileri atomik olarak işlemek, olay güdümlü sistemlerdeki çift yazma sorununu ortadan kaldırmak için işlemsel outbox desenini öğrenin. RabbitMQ Messaging & Async Systems ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
RabbitMQ Messaging & Async Systems öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te RabbitMQ Messaging & Async Systems, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Güvenilir Yayınlama için Outbox Deseni” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu RabbitMQ Messaging & Async Systems dersinde kod yazıp çalıştırabilir miyim?
Evet. Her RabbitMQ Messaging & Async Systems dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Mesaj İşlemede İdempotentlik
- RabbitMQ ile Saga Örüntüsü
- Komut-Sorgu Sorumluluklarının Ayrılması (CQRS)
- Güvenilir Yayınlama için Outbox Deseni