lilydocs
HTTP APIWebSocketConsumer
Mesaj işleme3 dk okuma

Typed extractor'lar

Mesaj metadata, DI, local state ve payload verisini handler parametreleriyle alın.

Extractor'lar framework'ün delivery durumunu handler'ın istediği Rust değerlerine dönüştürür. Metadata ve servisler body'yi tüketmeden alınır; body sahibi payload extractor varsa son parametre olur.

Metadata ve payload sırası#

Aşağıdaki method'u ilk uygulamanın #[queue_service] impl OrderWorker bloğundaki method yerine kullanabilirsiniz. DeliveryContext ve RetryCount body'yi tüketmez; Json<OrderCreated> en son çözülür. İlgili tipleri lilyrs::queue içinden import edin.

Rust
#[queue("orders.created", version = 1, content = "json")]
async fn created(
    &self,
    context: lilyrs::queue::DeliveryContext,
    _retry: lilyrs::queue::RetryCount,
    Json(event): Json<OrderCreated>,
) -> Result<(), QueueHandlerError> {
    let _event_id = context.event_id();
    println!("{}", event.order_id);
    Ok(())
}

Parts extractor'lar bildirilen sırada çalışır. Bir extractor reddederse sonraki extractor ve handler çağrılmaz; girilmiş middleware prefix'i normal hata unwind yoluna gider. En çok 16 extractor ve en çok bir terminal payload vardır. Bir type'ın adının Json olması değil, uyguladığı trait hangi role sahip olduğunu belirler.

Metadata, servis ve local state#

Extractor Verdiği değer
DeliveryContext Queue/exchange/routing, event, schema, content, retry ve redelivery metadata'sı
EventId, SchemaVersion, ContentKind Sözleşmenin tek bir alanı
RetryCount, Redelivered Framework retry sayısı ve ayrı broker redelivery bayrağı
DeliveryHeaders, DeliveryProperties Bounded header'lar ve allowlist uygulanmış AMQP property'leri
DeliveryCancellation, DeliveryDeadline Salt okunur execution sinyali ve normal pipeline cutoff'u
Service<T> Aktif delivery scope üzerinden DI servisi
Local<T>, Option<Local<T>> Önceki aşamanın delivery-local typed verisi

Bu değerler broker channel veya ACK yetkisi taşımaz. reply_to property'sini almak otomatik request/reply servisi kurmaz. DeliveryCancellation ve DeliveryDeadline, framework'ün execution kontrolünün salt okunur yüzeyleridir; başka subsystem context'lerine bağlamak uygulamanın açık tercihidir.

Payload seçimi#

Extractor Content sözleşmesi Davranış
Json<T> json DeserializeOwned + Send; bozuk JSON permanent hata
TextPayload text Owned UTF-8 String; bozuk encoding permanent hata
BinaryPayload binary Bounded body byte'ları
RawDelivery Geçerli açık content token'ı Body ve metadata; ACK/NACK nesnesi değil
Özel FromDelivery Custom contract Tek body authority ile uygulama decoder'ı

Body authority bir kez tüketilir. Aynı method'a hem Json<T> hem RawDelivery eklemek veya payload'ın arkasına metadata parametresi koymak doğru değildir. Raw body seçmek envelope doğrulamasını veya transport boyut sınırlarını kaldırmaz.

Opsiyonel değer ve ret davranışı#

Option<E> yalnız OptionalFromDeliveryParts uygulayan E için geçerlidir. Option<Local<T>> eksik local değeri None olarak verebilir; Option<Service<T>> veya Option<Json<T>> genel bir “hata olursa yok say” mekanizması değildir. Required Local<T> bulunamazsa retryable hata döner.

Metadata/DI/local üzerinden özel değer üretmek için FromDeliveryParts, body decode etmek için FromDelivery kullanın. JSON'un Rust tipine dönüşmesi ile iş verisinin doğrulanması ayrı adımlardır.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod