Deadline ve cancellation
Normal pipeline’ın ortak deadline’ını, cooperative iptali ve cleanup için ayrılan süreyi doğru kullanın.
delivery_execution_timeout_millis, tek delivery için execution ve cleanup bütçesidir. Varsayılan 30.000 ms, geçerli aralık 100–900.000 ms’dir. Before, guard, owner resolution, extraction, handler ve normal reverse after aynı absolute deadline’ı paylaşır. Her callback yeni bir tam timeout almaz.
Handler’da kalan süreyi okuyun#
use lilyrs::queue::{DeliveryCancellation, DeliveryDeadline, QueueHandlerError};
async fn check_work_budget(
cancellation: DeliveryCancellation,
deadline: DeliveryDeadline,
) -> Result<(), QueueHandlerError> {
if cancellation.is_cancelled() || deadline.remaining().is_zero() {
return Err(QueueHandlerError::retryable("WORK_INTERRUPTED"));
}
Ok(())
}Bu yardımcı fonksiyon yalnız o anda bütçe olup olmadığını kontrol eder; daha sonra başlayan I/O’yu kendiliğinden sınırlamaz. Handler bu tipleri parts extractor olarak alabilir. Dış çağrıya uygun timeout/deadline ve cancellation uyarlamasını açıkça ekleyin; farklı subsystem cancellation tipleri arasında isim benzerliğinden dönüşüm varsaymayın.
Normal cutoff ve ortak reserve#
delivery start ───── normal pipeline cutoff P ───── hard cutoff H
before / guard / handler / after shared reserve
cooperation / termination
/ exact scope disposalReserve başlangıçtaki kalan sürenin dörtte biri ile 1 saniyenin küçük olanıdır. Örneğin 30 saniyelik başlangıç bütçesinde normal pipeline için yaklaşık 29 saniye kalır. Cooperation, abnormal middleware unwind ve DI scope disposal aynı reserve’i paylaşır; ayrı ek süreler değildir.
Cutoff veya execution cancellation geldiğinde framework önce salt okunur sinyali bildirir, sonra normal pipeline’ı kalan local/root süreyi aşmadan en fazla 250 ms daha poll eder. Pipeline bu pencerede dönerse gerçek success/error sonucu korunur. Dönmezse execution bırakılır; retained cleanup owner invocation, entered middleware bilgisi ve scope receipt’iyle devam eder.
Sinyal, bitiş kanıtı değildir#
DeliveryCancellation yalnız cancelled(), is_cancelled() ve reason() ile gözlenir. Uygulama framework token’ını cancel edemez; kendi iş reddini typed error ile ifade eder. Admission’ın kapanması tek başına bir delivery cancellation reason üretmez. Sinyali görmek cleanup veya broker settlement’ın bittiği anlamına gelmez.
Normal after hâlâ pending ise handler dönmüş olsa bile pipeline tamamlanmamıştır. Abnormal termination callback’i ayrı read-only cleanup cancellation ve deadline kullanır. Ok veya Err ile tamamlanmış normal after tekrar çağrılmaz; kesilen cleanup callback’i de yeniden denenmez.
Shutdown ve settlement ile ilişkisi#
Shutdown sırasında delivery süreleri ortak application root deadline ile kısalır. settlement_timeout_millis ACK/NACK için ayrı local kapaktır; root bütçesine eklenmez. Yield etmeyen CPU işi veya blocking destructor async timeout ile preempt edilemez. Bu yüzden shutdown raporu başarılı bitiş ile eksik termination kanıtını ayrı tutar.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.