AsyncLocalStorage ile requestId’yi uygulama boyunca taşımak

0 Yanıt 0 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Bir isteğin hangi log satırlarını ürettiğini takip etmek için requestId’yi her fonksiyona parametre olarak geçirmek bir süre sonra yorucu oluyor. Node.js’te AsyncLocalStorage bu işi sadeleştirebiliyor; ama kapsamı ve sınırları konusunda birkaç noktayı netleştirmek istiyorum.

İstek bağlamı: Gelen isteği bir bağlam içinde çalıştırıp requestId’yi orada saklamak, aynı asenkron akışta çağrılan servis ve loglama kodlarının bu değere erişmesini sağlıyor. Örneğin:

KOD
1als.run({ requestId }, () => handler(req, res));


Alt tarafta
KOD
1als.getStore()?.requestId
ile okunabiliyor. Böylece her servis metoduna ayrıca requestId geçirmek gerekmiyor. Yine de bağlam yokken çalışan kodda
KOD
1getStore()
değerinin bulunmayabileceğini hesaba katmak gerekiyor.

Sınırlar: Zamanlayıcılar ve yaygın Promise akışları genellikle bağlamı korusa da, her özel callback düzeninde bunu varsaymak istemiyorum. Worker thread veya ayrı bir süreç ise kendi başına aynı bağlamı devralmıyor; gerekli requestId gibi alanları mesajın parçası olarak açıkça iletmek gerekiyor.

Bir de testlerde birbirine paralel istekler çalıştırıldığında bağlamların karışmadığını doğrulamak önemli görünüyor. Siz AsyncLocalStorage’ı üretimde log korelasyonu için kullanıyor musunuz; özel callback’lerde ya da testlerde karşılaştığınız bir bağlam kaybı oldu mu?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi