lilydocs
HTTP APIWebSocketConsumer
Referans5 dk okuma

Sınırlar ve garantiler

Delivery, transaction, metadata ve shutdown sınırlarını doğru garanti kapsamıyla okuyun.

Consumer, uygulama lifecycle’ını ve delivery kaynaklarının yönetimini üstlenir. Broker, veritabanı ve dış sistemler arasındaki her işlemi tek bir dağıtık transaction’a dönüştürmez. Uygulamanın güvenebileceği davranışı seçilen guarantee modu, bounded policy ve gözlenen terminal sonuç birlikte belirler.

Delivery garantileri#

Davranış Verilen garanti Uygulamanın sorumluluğu
At-least-once ACK belirsizliği veya redelivery nedeniyle handler tekrar çalışabilir. İş yan etkilerini idempotent tasarlamak.
Transactional inbox Aynı handler/event için retained completed kayıt iş pipeline’ını atlatır. Aynı DB transaction context’ini ve uygun retention’ı kullanmak.
Transactional outbox İş verisi ile outgoing kayıt atomik commit edilir; relay confirm takip eder. Downstream deduplication ve destination provisioning.
Retry/DLQ handoff Başarılı confirmed handoff ile original ACK sıralanır. DLQ gözlemi, triage ve kontrollü replay.

Retry sayısı, queue retention/TTL, operatör silmesi ve broker kalıcılık ayarları mesajın işlenebileceği pencereyi etkiler. At-least-once, sınırsız saklama veya her işin mutlaka başarılı olacağı sözü değildir. Header’sız mesaj için V1/JSON fallback yoktur; canonical envelope kabul koşuludur.

Transaction sınırı ve replay#

Inbox completion, aynı transaction context’indeki iş yazıları ve outbox kaydı seçilen DB’de atomiktir. Broker ACK, relay publish, başka DB/cell, Redis, HTTP ve dosya işlemleri bu sınırın dışındadır. Broker–DB 2PC veya uçtan uca exactly-once sağlanmaz. Transactional inbox ve outbox crash pencerelerini açıklar.

MongoDB transient transaction retry’si bütün pipeline’ı yeni scope’ta replay edebilir; commit-result reconciliation ise aynı commit’i tekrarlar. PostgreSQL concurrent duplicate normal application retry/DLQ yolunu kullanır. Inbox deduplication süresi retention ile sınırlıdır ve handler kimliğinin yeniden adlandırılmasından etkilenebilir.

Plan ve pipeline sınırları#

Kaynak Sınır
Configured physical queue 256
Linked handler 512
Trace cell 256
Consumer descriptor / aggregate plan 1024 byte / 256 KiB
Effective middleware / guard plan Her biri en çok 64
Handler parametreleri &self hariç en çok 16; en çok bir terminal payload extractor
Handler concurrency Queue başına 1–1024 permit
Prefetch / local buffer Prefetch en çok 4096; buffer en çok prefetch
Retry bucket Queue başına 32; topology toplamında 4096

Bu değerler farklı kaynakları sınırlar. concurrency = 8, sekiz process veya sekiz broker subscription açma talimatı değildir; handler admission permit sayısıdır. Prefetch, unacked broker delivery sınırıdır. Toplam RAM kullanımı ayrıca payload boyutu, buffer, aktif handler ve uygulama allocation’larına bağlıdır.

Payload ve metadata sınırları#

Alan Sınır
Queue delivery body Varsayılan 1 MiB; mutlak üst sınır 16 MiB
Outbox body Policy varsayılanı 8 MiB; mutlak üst sınır 16 MiB; Mongo BSON overhead ayrıca
Queue/exchange/routing identity 1–200 UTF-8 byte; türetilmiş adlar dahil
Content kind En çok 64 byte ve canonical içerik formatı
AMQP header sayısı / key 64 entry / key başına 128 byte
AMQP value / aggregate metadata 8 KiB / 32 KiB
Nested AMQP metadata Derinlik 4; en çok 256 element
W3C traceparent / tracestate 55 byte / 512 byte

Framework retry/failure/trace handoff metadata’sı için de yer ayırır. Uygulama header’ları teorik toplam sınıra kadar doldurulduğunda yeniden publish için ek alan kalmayabilir; kabul edilen footprint framework’ün ekleyeceği alanları da hesaba katar. Byte sınırı karakter sayısı değildir: çok byte’lı UTF-8 içerikte limit daha az karaktere karşılık gelir.

Lifecycle, deadline ve settlement#

Normal pipeline ortak delivery cutoff’unu kullanır; cancellation önce sinyallenir ve bounded cooperation penceresinden sonra gerekirse execution düşürülür. Forced drain başlangıcı ile final settlement authority revocation aynı an değildir. Sağlıklı channel cooperative pencerede settlement yapabilir; transport generation kaybında eski channel yetkisi kullanılamaz.

Consumer’ın runtime supervisor’ı cleanup owner’ıdır. run / run_with_cancellation bekleyicisinin veya managed startup bekleyicisinin drop/abort edilmesi shutdown isteğine dönüşür; owner kaynakları temizleme sorumluluğunu korur. Buna karşılık ManagedConsumer::wait() observer future’ını bırakmak shutdown başlatmaz. ManagedConsumer::shutdown() çalıştırıldığında shutdown’ı ister; bu bekleyici future’ını bırakmak supervisor’ı iptal etmez. Asenkron fallback’in tamamlanması için onu çalıştıran Tokio runtime ayakta kalmalıdır. Caller-owned container ve external tracing’in disposal sorumluluğu üst owner’dadır.

Shutdown report’ta bir action’ın başarılı dönmesi, bağımlılığın termination’ının kesin gözlenmesi ve bütün shutdown’ın başarılı olması ayrı bilgilerdir. Unresolved settlement başarılı ACK diye raporlanmaz. Graceful shutdown outbox’ın boşaldığını veya bütün dış yan etkilerin tamamlandığını garanti etmez.

Gözlem ve kapsam dışı yüzeyler#

ManagedConsumer::snapshot() bounded aggregate durum verir ve payload/event ID/routing key/broker endpoint/credential içermez. Ayrı delivery_terminal_observations() diagnostic API’si en çok 4096 observation tutar ve event ID içerebilir; snapshot’ın privacy contract’ını bu farklı API’ye genellemeyin. Hiçbiri eksiksiz transactional audit geçmişi değildir.

Consumer otomatik HTTP health/metrics route’u, CORS, CSRF, cookie, multipart endpoint’i veya dashboard oluşturmaz. RawDelivery ham Lapin channel ya da manual ACK handle değildir. Private provider SPI ve qualification helper’ları public uygulama extension point’i olarak kullanılmaz. İlgili public yollar settlement, operational snapshots ve AsyncAPI sayfalarındadır.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod