Uygulama yaşam döngüsü
Consumer'ın başlangıç, admission, delivery ve kapanış sahipliğini öğrenin.
Consumer uygulamasında bir handler'ın çalışması daha büyük bir yaşam döngüsünün parçasıdır. Configuration yüklenir, bağımlılıklar hazırlanır, fiziksel kuyruklar kaydedilir ve kabul edilen her delivery için ayrı bir çalışma kapsamı açılır. Bu adımları aynı owner altında tutmak startup hatalarını ve kapanışı da yönetilebilir kılar.
Çalıştırma biçimini seçin#
| Public API | Kullanım | Kapanış tetikleyicisi |
|---|---|---|
Consumer::run() |
Varsayılan bağımsız worker process'i | OS sinyalleri ve runtime sonucu |
Consumer::builder().run() |
Middleware, tracing veya başka builder seçimi | OS sinyalleri ve runtime sonucu |
.run_with_cancellation(token) |
Üst uygulamanın token'ıyla yönetim | Token, provider sonlanması veya host kapanışı |
.start_managed() |
Health gözlemi ve programatik yönetim | Handle üzerinden talep ve runtime sonucu |
Bu API'ler mevcut bir Tokio runtime içinde çağrılır. Consumer için HTTP örneğindeki .build().await?.start().await? zinciri yoktur. Token ve managed biçimleri OS signal listener kurmaz; sinyal sahipliği üst uygulamadadır. Önceden iptal edilmiş token, composition başlamadan başarılı dönüş yapar.
use lilyrs::consumer::{CancellationToken, Consumer, ConsumerError};
async fn run_worker(stopping: CancellationToken) -> Result<(), ConsumerError> {
Consumer::builder().run_with_cancellation(stopping).await
}Üst uygulama token'ı iptal ettikten sonra run_worker future'ının veya onu çalıştıran task'ın sonucunu da bekler. Token'ı iptal etmek yalnız talep gönderir; tamamlanma kanıtı beklenen sonuçtur.
Startup hangi işleri yapar?#
- Builder ownership ve pipeline construction timeout seçenekleri doğrulanır; açık tracing tercihi uygulanır.
- Framework-owned DI kurulur veya caller-owned container alınır. Singleton initialization configuration okuyabilir ve I/O yapabilir.
- Queue runtime sahipliği alınır; configuration, linked handler'lar ve pipeline tek accepted plana dönüştürülür.
- Middleware/guard concrete tipleri kurulur; tanımlı fiziksel kuyruklar broker'da kaydedilir.
- Son cancellation kontrolünden sonra managed handle hazır olur; özel runtime owner kaynakları supervision altında tutar.
Startup'ı “hiç I/O yapılmayan hazırlık” diye düşünmeyin. DI initialization ve broker registration dış sistemlere erişebilir. Mesaj admission'ı ise queue runtime'ın çalışma aşamasıdır. Bir kuyruğun hazır olması bütün kayıtların veya tüm application startup'ının tamamlandığı anlamına gelmez.
Startup yarıda kesilirse oluşturulmuş kaynaklar rollback yoluna aktarılır. Pending DI build kendi cleanup receipt'ini taşır, ancak Consumer'ın ortak kapanış sınırına tabidir; her rollback aşamasına yeni bağımsız bir 30 saniye eklenmez.
Her delivery için çalışma sırası#
Contract check → scope → middleware before → guards
→ handler owner resolution → parts extractors → terminal payload → handler
→ middleware after (reverse) → scope disposal → settlementMetadata sözleşmesi uygunsa delivery scope açılır. Middleware ve guard'lar tamamlandıktan sonra handler owner'ı aktif scope içinde çözülür. Böylece Scoped worker ve Service<T> parametreleri aynı delivery'ye bağlanır. Son normal middleware callback'i bitmeden pipeline tamamlanmış sayılmaz.
Timeout veya shutdown sırasında önce cooperative cancellation bildirilir; cleanup ve settlement yetkilerinin ayrı sınırları vardır. Bu sıranın ayrıntıları deadline, middleware ve settlement sayfalarındadır.
Sahiplik kapanışta devam eder#
Framework, yeni admission'ı kapatır; kabul edilmiş delivery'leri, scope cleanup'larını ve settlement işlemlerini uzlaştırır. Queue kapanışı kanıtlandıktan sonra framework-owned DI kapanabilir. Telemetry kapanışı da kaynakları kullanan işlerin bitişine bağlıdır. Aynı root deadline graceful ve force aşamalarını sınırlar.
ManagedConsumer paylaşılabilir bir talep/gözlem handle'ıdır; gerçek kaynaklar özel runtime owner/supervisor'dadır. Son handle'ın Drop edilmesi shutdown ister ama async sonucu bekleyemez. .shutdown().await ve rapor değerlendirmesi için managed Consumer ve kapanış bölümlerine geçin.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.