lilydocs
HTTP APIWebSocketConsumer
RabbitMQ3 dk okuma

Kuyruk ve topology

Fiziksel queue, binding, retention ve topology sahipliğini mesaj handler’ından ayrı yapılandırın.

Handler makrosu hangi fiziksel queue, sürüm ve content sözleşmesinin işlendiğini söyler. TOML ise o queue’nun exchange, binding ve runtime politikasını seçer. [rabbitmq.consumer] bağlantı profilidir; [[rabbitmq.topology.queues]] credential içermeyen topology tanımıdır.

Bir queue’yu tam tanımlayın#

Aşağıdaki entry’yi ilk uygulamadaki bağlantı profiliyle birlikte kullanın. Aynı isimde mevcut queue entry’si varsa bunu onun yerine koyun; ikinci bir orders.created entry’si eklemeyin.

TOML
[[rabbitmq.topology.queues]]
name = "orders.created"
exchange_name = "orders"
routing_key = "orders.created"
exchange_kind = "direct"
queue_type = "classic"
topology_ownership = "framework_managed"
concurrency = 2
prefetch_count = 10

[rabbitmq.topology.queues.retention]
main_max_messages = 100000
main_max_bytes = 1073741824
retry_bucket_max_messages = 10000
retry_bucket_max_bytes = 268435456
dead_letter_max_messages = 10000
dead_letter_max_bytes = 268435456

Altı retention alanı zorunludur; her biri 1..=i64::MAX aralığında olmalıdır. Retry kapalı olsa bile canonical tanım bu alanları ister. Ana queue, her ayrı retry bucket ve DLQ farklı fiziksel kaynaklardır; retention değerleri tek bir ortak kapasite havuzu oluşturmaz.

Desteklenen queue seçenekleri#

Seçenek Sözleşme
exchange_kind Yalnız direct
queue_type classic veya quorum
durable Varsayılan true; quorum için zorunlu
exclusive True reddedilir; bootstrap ve runtime ayrı pooled bağlantılar kullanır
auto_delete Varsayılan false; quorum true kabul etmez
single_active_consumer Varsayılan false; tek aktif consumer broker seçeneği
max_priority Classic için 1..16; quorum’da reddedilir

Queue/exchange/routing kimlikleri 1–200 byte, trim edilmiş ve control karakterlerinden arınmış olmalıdır. Türetilen retry/DLQ isimleri de doğrulanır; ana queue adını 200 byte yapmak türetilmiş isimlere yer bırakmayabilir. Bu alanlarda secret/file reference kullanılmaz.

Kaynakları kim oluşturur?#

framework_managed varsayılandır: Lily kabul edilmiş immutable planın exchange, queue ve binding’lerini declare eder. Mevcut queue’nun declaration argümanları farklıysa startup başarısız olabilir. Lily eski queue’yu silip verisini dönüştürmez; değişikliği deployment planınızda yönetin.

TOML
# Fields in the existing queue entry, before its retention table.
topology_ownership = "external"
dead_letter_exchange = "operations.dlx"
dead_letter_routing_key = "orders.rejected"

External mod exchange/queue varlığını passive kontrol eder ve kaynak oluşturmaz. DLX ile dead-letter routing key açıkça verilir; retry bucket ve DLQ dahil gereken kaynakları operatör kurar. Binding’ler operator-unverified kalır: varlık kontrolü binding veya bütün retention argümanlarının doğruluğunu kanıtlamaz.

Planı bağlantıdan önce doğrulayın#

Rust
use lilyrs::config::{RabbitMqTopologyConfig, RabbitMqTopologyPlan, RabbitMqTopologyPlanError};

fn validate_topology(config: &RabbitMqTopologyConfig)
    -> Result<RabbitMqTopologyPlan, RabbitMqTopologyPlanError>
{
    RabbitMqTopologyPlan::compile(config)
}

Bu helper facade’in config feature’ını ister; consumer yanına ekleyin. Plan validation broker’a bağlanmaz ve izinleri sınamaz. Yalnız publisher çalıştıran bir process için topology initialization otomatik değildir; publisher rehberindeki explicit bootstrap kullanılır.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod