lilydocs
HTTP APIWebSocketConsumer
RabbitMQ3 dk okuma

ACK, NACK ve settlement

Handler sonucu, DB commit’i, handoff confirm’i ve original broker settlement kanıtını birbirinden ayırın.

Handler Result<(), QueueHandlerError> döner; ACK veya NACK nesnesi almaz. Lily, pipeline sonucu, scope cleanup ve gerekiyorsa transaction sonucunu birleştirerek original delivery’nin settlement’ını yönetir. RawDelivery de bu yetkiyi uygulamaya açmaz.

Normal karar tablosu#

Sonuç Framework yolu
Pipeline ve cleanup başarılı; gereken transaction commit tamam Original delivery ACK
Retryable failure ve kalan application retry hakkı Retry bucket mandatory publish → confirm → original ACK
Permanent failure veya tükenmiş retry hakkı DLQ mandatory publish → confirm → original ACK
Handoff adapter hatası/panic/timeout Kalan bütçede bir bounded NACK/requeue; failure korunur
Handoff confirm var, original ACK belirsiz Confirm saklanır; original settlement unresolved
Mongo lease/ambiguous-commit deferred Original bounded requeue; normal application retry değildir

Bu tablo sağlıklı transport ve kullanılabilir settlement bütçesi içindeki yolları gösterir. Authority kaybı, cancellation veya deadline nedeniyle bir yol tamamlanamayabilir. Normal business failure ile mesajı güvenle başka queue’ya taşıyamayan altyapı failure’ı ayrı sonuçlardır.

Confirm ile original ACK farklı kanıttır#

Akış
application failure
  -> mandatory publish to selected retry/DLQ destination
  -> publisher confirm
  -> original delivery ACK

Handoff confirm hedefe publish’in broker tarafından kabul edildiğini gösterir. Original ACK bunun ardından gelir. ACK başarısız veya belirsizse aynı attempt içinde handoff tekrar edilmez; confirm kanıtı kaybolmaz. Broker original mesajı yeniden teslim ederse duplicate işleme olasılığı vardır.

Ok(()) dönen handler, successful after_delivery, DB commit veya local task join tek başına remote ACK kanıtı değildir. Transactional inbox belirli DB sınırında deduplication sağlar; broker ve dış sistemler için global exactly-once sonucuna genişletilmez.

Poison ve büyük body yolları#

Geçersiz canonical envelope veya metadata bounds uygulama pipeline’ından önce reddedilir. Zararlı raw metadata’yı extractor ile okuyabilmeyi beklemeyin; rejection yolu bounded/sanitized veriyi kullanır. Desteklenmeyen sürüm/content ise dispatch aşamasında scope açılmadan permanent failure üretir.

Body boyutu limiti aşılırsa body uygulama için clone edilmeden non-requeueing broker NACK/dead-letter uygulanır. Bu broker-native yol, uygulamanın mandatory publish/confirm handoff’uyla aynı teslimat kanıtını sağlamaz.

Force ve belirsiz sonuç#

Force bildirimi sağlıklı channel üzerindeki settlement authority’yi hemen iptal etmez. Cooperative pencerede tamamlanan iş kalan bütçede ACK alabilir. Final abort gerektiğinde authority revoke edilir ve gerçek task join’leri gözlenir; tamamlanamayan settlement unresolved kalır.

Aynı original delivery için ACK/NACK çağrısı körlemesine tekrarlanmaz. Redelivered=true, önceki işin commit edip etmediğini söylemez. Olay düzeyinde inceleme için operational diagnostics, lifecycle sonucu için shutdown raporu kullanın.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod