lilydocs
HTTP APIWebSocketConsumer
Referans7 dk okuma

Yapılandırma referansı

Consumer bağlantısı, topology, delivery, inbox/outbox ve lifecycle ayarlarının varsayılanları ve sınırları.

Bu referans lilyrs 0.1.0 Consumer contract’ını özetler. Süre alanlarının birimi isimlerinde yazılıdır; _millis ile _secs alanlarını karıştırmayın. Bilinmeyen typed config alanları reddedilir. TOML’i başarıyla deserialize etmek bütün runtime contract’larının doğrulandığı anlamına gelmez; topology ve bağlantı planları da hazırlanır.

Bölüm haritası#

Bölüm Sorumluluk
[rabbitmq.consumer] Consumer bağlantısı ve recovery profili
[[rabbitmq.topology.queues]] Physical queue, binding ve delivery politikası
[rabbitmq.topology.queues.retention] Ana queue, retry bucket ve DLQ için altı zorunlu sınır
[rabbitmq.topology.queues.transactional_inbox] Seçili feature ile DB binding ve inbox/outbox policy
[queue_client] / [[queue_client.cells]] Normal publisher bağlantıları; Consumer bağlantısından ayrıdır
[postgresql] / [database] / [cache] Sırasıyla PostgreSQL / MongoDB / Redis entegrasyonları
[lifecycle] Application shutdown bütçesi

Topology bölümü credential-free’dir: identity alanlarında ${secret:...} veya ${file:...} kullanmayın. Bağlantı secrets’ları ilgili connection bölümünde çözülür. Dosya keşfi, environment override ve resolver seçimi için configuration ve secrets rehberlerini izleyin.

Consumer bağlantısı#

Alan Varsayılan Kural
connection_string Yok URI yolu; ayrı username/password/hostname/port/vhost ile birlikte verilmez.
username, password, hostname Yok URI yoksa boş olmayan değerler zorunlu.
port AMQP: 5672; AMQPS: 5671 Ayrı alanlarla kurulan bağlantının port’u.
vhost / Ayrı alan modunun varsayılanı; decoded URI vhost en çok 255 UTF-8 byte.
use_tls Yok Açık true/false zorunlu; URI scheme ile uyuşmalı.
pool_size 5 1–32; bağlantı sayısı, handler concurrency değildir.
connection_timeout_secs 10 1–120 saniye.
confirm_timeout_secs 10 1–300 saniye.
heartbeat_secs 30 5–600 saniye.
max_reconnect_attempts 5 1–100 bağlantı/reconnect denemesi.
reconnect_backoff_millis 250 50–30.000 ms.
persistence_enabled true Bağlantı seçeneklerine taşınır. Consumer retry/DLQ gelen mesajın properties değerlerini korur; transactional outbox daima persistent yayınlar. Normal publisher tercihi [queue_client] altındadır.

connection_string içinde query veya fragment desteklenmez; heartbeat ve timeout için typed alanları kullanın. URI’nin host, username ve password içermesi gerekir. use_tls = true amqps://, false ise amqp:// ister. Ayrı alanlardaki varsayılan / vhost ile URI’de açık trailing slash’ın empty-vhost anlamını karıştırmayın.

TLS ve mTLS materyali#

[rabbitmq.consumer.tls] alanı Kural
additional_ca_bundle İsteğe bağlı absolute PEM path; platform trust store’a eklenir; en çok 4 MiB.
client_certificate_chain İsteğe bağlı absolute PEM path; en çok 1 MiB.
client_private_key İsteğe bağlı absolute, şifresiz PEM private key path; en çok 128 KiB.

Client certificate ile private key birlikte verilir; biri eksikse bağlantıdan önce reddedilir. TLS materyalini use_tls = false ile vermeyin. Publisher single ve factory cell’leri aynı TLS contract’ını kendi tls tablolarında kullanır. Ayrıntılı kurulum transport security sayfasındadır.

Queue identity ve topology#

Alan Varsayılan Kural
name, exchange_name, routing_key Zorunlu 1–200 UTF-8 byte; boş, çevre whitespace veya control karakter kabul edilmez.
exchange_kind direct Desteklenen exchange kind.
queue_type classic classic veya quorum.
topology_ownership framework_managed framework_managed veya external.
durable true Quorum için true zorunlu.
exclusive false true desteklenmez.
auto_delete false Quorum için true reddedilir.
single_active_consumer false Aktif consumer seçimi; process sayısı veya concurrency ayarı değildir.
max_priority Yok Classic için isteğe bağlı 1–16; quorum için verilmez.
message_ttl_ms Yok Verilirse pozitif u32; ana queue message TTL.
dead_letter_exchange {exchange_name}.dlx.v2 External ownership için açıkça zorunlu.
dead_letter_routing_key Queue adı External ownership için açıkça zorunlu.

Türetilmiş retry/DLQ adları da 200-byte identity sınırına uymalıdır; uzun bir base name tek başına geçerli görünse de türetilmiş adı aşabilir. DLQ adı {queue_name}.dlq.v2 olur. External ownership kaynakları operator provision eder; Lily’nin passive kontrolü yönetim API’sinden bütün broker policy’lerini eksiksiz denetlemek anlamına gelmez.

Delivery, concurrency ve retry#

Alan Varsayılan Kural
concurrency 1 1–1024 handler permit’i.
prefetch_count 10 1–4096 unacked delivery.
delivery_buffer_capacity prefetch_count 1–prefetch_count; bounded local buffer.
max_message_size_bytes 1048576 1–16777216 byte; decode/clone öncesi uygulanır.
retry_attempts 0 0–100; ilk delivery’den sonraki ek denemeler.
retry_backoff_millis 1000 100–300000 ms.
max_retry_backoff_millis 60000 Başlangıç backoff’u–900000 ms.
retry_jitter_ratio 0.0 Finite 0.0–0.5.
delivery_execution_timeout_millis 30000 100–900000 ms; pipeline ve cleanup için toplam delivery bütçesi.
settlement_timeout_millis 5000 1–60000 ms; bir original ACK/NACK işlemi için.

DeliveryDeadline, normal before/guard/extractor/handler/after işlemlerinin ortak cutoff’udur. Her aşama için yeni timeout veya normal after için ikinci reserve başlamaz. Jitter fixed queue-level TTL bucket’ları arasından deterministik seçim yapar; her mesaj için sınırsız ayrı delay queue oluşturmaz. Bir logical queue için en çok 32, toplam topology için 4096 retry bucket kabul edilir.

Altı zorunlu retention alanı#

Alan Anlamı
main_max_messages Ana queue message sayısı
main_max_bytes Ana queue body byte toplamı
retry_bucket_max_messages Her retry bucket’ın message sayısı
retry_bucket_max_bytes Her retry bucket’ın body byte toplamı
dead_letter_max_messages DLQ message sayısı
dead_letter_max_bytes DLQ body byte toplamı

Bunlar [rabbitmq.topology.queues.retention] altında birlikte verilir; varsayılan yoktur. Her değer 1..=i64::MAX aralığındadır. Bu broker saklama sınırlarıdır; uygulamanın toplam heap bütçesi veya DB inbox retention süresi değildir. retry_attempts = 0 seçilse de typed retention contract’ı korunur.

Transactional inbox ve outbox#

Bu tablo, [rabbitmq.topology.queues.transactional_inbox] alanlarını kapsar. İlgili facade feature’ı açık olmalıdır. backend zorunlu postgresql veya mongodb değeridir. database_cell factory modunda zorunlu, single modunda yasaktır; verilirse 1–128 UTF-8 byte, trimmed ve control-free olmalıdır.

Alan Varsayılan Kural
inbox_lock_timeout_millis 30000 1–60000; MongoDB alt sınırı 1000.
outbox_claim_lease_millis 30000 1–900000; publish timeout’tan kısa olamaz.
relay_batch_size 100 1–1000 kayıt.
relay_max_in_flight_bytes 8388608 1–268435456; tek mesaj mutlak sınırı ayrıca 16 MiB.
relay_poll_interval_millis 250 1–60000.
relay_publish_timeout_millis 10000 1–60000.
relay_max_publish_attempts 5 1–100; ilk publish dahil.
relay_retry_initial_backoff_millis 250 1–60000.
relay_retry_max_backoff_millis 30000 1–900000; initial backoff’tan küçük olamaz.
inbox_retention_secs 604800 1–31536000; tamamlanmış inbox.
outbox_retention_secs 604800 1–31536000; delivered outbox.
cleanup_interval_secs 3600 1–86400; iki retention süresini de aşamaz.
shutdown_drain_timeout_millis 30000 1–300000; dış shutdown deadline’ını uzatmaz.

inbox_lock_timeout_millis, uygulama transaction’ının azami çalışma süresi değildir. İşin gerçek deadline’ı delivery ve host bütçeleriyle ayrıca sınırlıdır. Aynı backend/cell’e bağlı queue’ların bütün transactional config’i eşit olmalıdır. Bu relational kurallar programmatic config ile de atlanamaz.

MongoDB transaction retry policy#

Aşağıdaki alanlar [rabbitmq.topology.queues.transactional_inbox.mongodb] altındadır. Tablo verilmezse varsayılan policy kullanılır; PostgreSQL binding’i altında verilmesi hatadır.

Alan Varsayılan Kural
max_transaction_attempts 3 1–100; ilk body çalışması dahil.
retry_initial_backoff_millis 10 1–60000.
retry_max_backoff_millis 1000 1–900000; initial’dan küçük olamaz.
commit_retry_timeout_millis 10000 1–60000; mevcut work deadline ile ayrıca sınırlı.

Body replay, commit reconciliation ve lease contention farklı yollardır. Bunları queue’nun retry_attempts değeriyle tek sayaç gibi düşünmeyin. MongoDB transaction’ları hangi durumda pipeline’ın tekrar çalıştığını açıklar.

Lifecycle ve builder seçimleri#

Seçim Varsayılan / sınır
[lifecycle].shutdown_timeout_secs 30 saniye; 1–3153600000. Tek aggregate shutdown bütçesi.
.pipeline_initialization_timeout(Duration) 30 saniye; sıfırdan büyük, en çok 300 saniye. Bütün pipeline constructor’ları için ortak.
Tracing Disabled; owned config/path veya external açıkça seçilir.
AsyncAPI Opt-in consumer-asyncapi ve bir .asyncapi(config) çağrısı.
Container Consumer-owned veya açık .container(Arc<ApplicationContainer>).

Bu üst sınırlar önerilen production timeout değerleri değildir. Kapanışta her alt aşama için yeniden süre başlatılmaz; pending DI rollback de Consumer attempt root’u ile sınırlandırılır. Source belgelerindeki eski deadline/rollback ifadelerinin düzeltilmiş karşılıkları sorun giderme sayfasında kayıtlıdır.

Publisher profilinin yeri#

[queue_client] kendi mode = "single" veya "factory" seçimini yapar. Single profilde connection alanları bu tabloda, factory modunda [[queue_client.cells]] altında ve zorunlu name ile tanımlanır. Consumer bağlantısını publisher bağlantısı yerine kullanmak için section adını değiştirmeyin. Publisher connection alanları yukarıdaki typed TLS/timeout contract’ını paylaşır; factory cell’de verilmeyen pool_size runtime varsayılanı 1, serde single profilinin varsayılanı 5’tir.

Publisher-only topology bootstrap açık bir işlemdir ve credential-free [rabbitmq.topology] planını kullanır. Mesaj göndermek için gerekli facade features, envelope ve confirm işleyişi publishing sayfasındadır. DB ve Redis alanlarının kendi backend doğrulama kuralları vardır; bunlar Consumer queue policy alanları değildir.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod