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.
[[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 = 268435456Altı 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.
# 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#
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.