Mesajdan iş akışına.
RabbitMQ mesajlarını DI, typed handler ve yönetilen uygulama yaşam döngüsüyle işleyin.
Bağımlılıklar, bir arada.
Servisleri tanımlayın. Oluşturma, paylaşım ve temizliği container yönetsin.
Dependency injection 02Başlangıçtan kapanışa.
Mesajlar, kuyruklar ve yönetilen kaynaklar için ortak bir uygulama yaşam döngüsü.
Uygulama yaşam döngüsüLily Consumer, RabbitMQ'dan gelen mesajları Rust handler'larına yönlendiren ve bu uygulamanın yaşam döngüsünü yöneten bileşendir. Siz mesaj sözleşmesini ve iş kurallarını yazarsınız; Lily servisleri kurar, delivery scope'unu açar, mesajı uygun handler'a taşır ve kapanışta sahip olduğu kaynakları süre sınırı içinde uzlaştırır.
Ortak temel: DI ve yaşam döngüsü#
HTTP API ve WebSocket ile aynı DI temeli kullanılır. Injectable ile kaydedilen servisler Singleton, Scoped veya Transient olabilir. Consumer'da Scoped servis bir bağlantıya değil, kabul edilmiş tek delivery'ye aittir. Aynı mesajın yeniden teslimi yeni bir scope oluşturur.
Consumer::run() yalnız bir döngü başlatmaz: configuration, handler keşfi, pipeline kurulumu, queue registration, runtime supervision ve kontrollü kapanış aynı uygulama sahibi altında birleşir. Uygulamanın kendisinin başlattığı bağımsız task'ların ve dış kaynakların sahipliği ayrıca tasarlanır.
Bir mesajın yolu#
Publisher → RabbitMQ → contract selection → delivery scope
→ middleware → guards → typed extraction → handler
→ reverse middleware exit → scope cleanup → settlementHandler seçimi (queue, version, content) anahtarıyla yapılır. Örneğin orders.created, 1, json sözleşmesi bir Json<OrderCreated> handler'ına gider. Geçersiz envelope ve desteklenmeyen sözleşmeler scope veya uygulama middleware'i açılmadan reddedilebilir.
Handler Result<(), QueueHandlerError> döndürür. Başarı, retryable hata ve permanent hata framework'ün settlement kararına girdi olur. Handler'a doğrudan ACK/NACK yetkisi verilmez; aynı delivery için birden fazla bileşenin settlement yapması önlenir.
Neler kurabilirsiniz?#
| Yetenek | Başlangıç noktası |
|---|---|
| Typed mesaj işleme ve sürümlü handler | Mesaj sözleşmeleri |
| Servis paylaşımı ve delivery scope | Bağımlılık enjeksiyonu |
| Ortak davranış ve uygulama politikası | Middleware ve guard |
| Retry, dead letter ve kapasite | Retry ve backpressure |
| DB, inbox ve outbox | Veri entegrasyonları ve transactional inbox |
| Health, shutdown ve belge üretimi | Managed Consumer, tracing, AsyncAPI |
Kurulum ve öğrenme sırası#
lilyrs = { version = "0.1.0", features = ["consumer"] }Public giriş lilyrs facade'idir. consumer feature'ı uygulama API'sini lilyrs::consumer, queue sözleşmelerini lilyrs::queue altında açar. DI derive ve kayıt altyapısını ayrıca kurmanız gerekmez. Temel kullanım RabbitMQ içindir; farklı bir broker seçen genel transport düğmesi yoktur.
Önce ilk Consumer'ı çalıştırın, ardından ayrı publisher ile bir mesaj gönderin. Sonra lifecycle, DI ve configuration bölümlerini izleyin. Böylece ileri transaction veya işletim ayarlarını, çalışan bir uygulamanın üzerine ekleyebilirsiniz.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.