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.
#[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.