lilydocs
HTTP APIWebSocketConsumer
Pipeline2 dk okuma

Delivery kapsamında veri

Middleware’den guard ve handler’a bounded typed veriyi aynı delivery içinde taşıyın.

Delivery-local map, tek bir mesajın işlenmesi sırasında aşamalar arasında veri taşır. Middleware’in hesapladığı policy sonucu veya audit bağlamı handler’da tekrar hesaplanmadan kullanılabilir. Map aynı delivery’nin scope’u ile yaşar; farklı mesajlar arasında paylaşılmaz.

Önce üretin, sonra çıkarın#

Tam guard örneği DeliveryAudit verisini before_delivery içinde ekler. Aşağıdaki parça o middleware callback’inin içindedir; exchange framework’ün verdiği QueueDeliveryExchange değeridir.

Rust
let event_id = exchange.context().event_id().into_inner().to_string();
exchange.insert_local(DeliveryAudit { event_id })?;

Handler’da Local(audit): Local<DeliveryAudit> parametresi bir owned clone alır. Parts extractor’ları payload’dan önce yazılır. Local<T> için T: Clone + Send + Sync + 'static gerekir; büyük immutable veride Local<Arc<T>> kullanarak kopyalanan nesneyi küçük tutabilirsiniz.

Zorunlu ve isteğe bağlı veri#

Extractor Değer yoksa
Local<DeliveryAudit> Retryable QUEUE_DELIVERY_LOCAL_MISSING
Option<Local<DeliveryAudit>> None

Required local hatası çoğunlukla üretici middleware’in kaydını veya sırasını kontrol etmeyi gerektirir. Sırf hatayı susturmak için optional yapmayın; optional, verinin bulunmamasının uygulama sözleşmesinde normal olduğu durumda uygundur. Option<E> bütün extractor hatalarını yutan genel bir mekanizma değildir.

Sınırlar ve tip kimliği#

Map en fazla 32 distinct Rust tipi tutar. Aynı tip yeniden eklenirse eski değer döner; yeni bir slot açılmaz. İki farklı anlam için aynı String tipini kullanmak yerine TenantKey(String) ve AuditLabel(String) gibi ayrı tipler tanımlayın. Boyut sınırı tip sayısı içindir; sakladığınız her değerin byte boyutunu uygulama sınırlamalıdır.

Exchange üzerinden typed local okuma, ekleme ve çıkarma yapılabilir. Local bir DI registration değildir; Service<T> ile otomatik çözülmez. Çoklu replica cache’i, durable idempotency kaydı veya veritabanı transaction’ı yerine geçmez.

Güven sınırını koruyun#

Kullanıcı kontrollü bir header’dan alınan tenant değeri doğrulanmış principal değildir. Önce gerekli imza/credential ve tenant ilişkisini doğrulayın; ardından doğrulanmış durumu ayrı bir local tipe koyun. Typed taşıma, verinin doğrulandığını kendiliğinden kanıtlamaz. Guard işleme iznini bu açık sözleşmeyle değerlendirmelidir.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod