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.
- framework/lily_consumer/src/plan.rs
- framework/lily_consumer/src/operational.rs
- framework/lily_consumer/src/consumer_runtime_owner.rs
- integrations/lily_queue/src/settlement.rs
- integrations/lily_queue/src/transactional.rs
- integrations/lily_queue/src/providers/rabbitmq/metadata.rs
- integrations/lily_queue/src/pipeline.rs
- foundation/lily_config/src/topology_plan.rs