تفعيل علامات القياس المخصصة لـ WebClient في Spring Boot
في عالم تطوير البرمجيات، يعتبر Spring Boot أداة قوية تسهل البناء السريع للتطبيقات المعقدة. من بين المزايا الكثيرة التي يقدمها Spring Boot، نجد WebClient، الذي يُستخدم لإجراء مكالمات HTTP بسلاسة. ومع ذلك، قد يواجه المطورون تحديات عند محاولة إضافة علامات مخصصة للمقاييس التي تُجمع من WebClient. تتناول هذه المقالة كيفية إضافة علامة مخصصة لمقاييس WebClient باستخدام البيانات المخزنة في MDC.
فهم MDC وأهميته في تطبيقات Spring Boot
تعد MDC (Mapped Diagnostic Context) أداة مفيدة في Java تُستخدم لتخزين معلومات سياقية لتسجيل الأحداث. يساعد استخدام MDC في تتبع القيم ذات الصلة عبر المكالمات المختلفة في التطبيقات، مما يسهل تصحيح الأخطاء وتحليل الأداء. في السياق الحالي، يسعى المطور لإضافة قيمة من MDC كعلامة مخصصة لمقاييس http.client.requests في WebClient.
كيفية إعداد WebClient مع علامات مخصصة
للبداية، يقوم المستخدم بتهيئة قيم معينة في خيط التنفيذ باستخدام MDC، كما هو موضح في الشيفرة التالية:
void makeWebClientCall() {
String customValue;
// إعداد قيمة مخصصة
MDC.put("customKey", customValue);
webClient.post()
.uri(partnerUrl)
.retrieve()
.bodyToMono(Void.class)
.block();
}
هنا، يتم استخدام MDC.put
لتخزين قيمة جديدة تحت مفتاح معين، مما يجعل هذه القيمة جاهزة للاستخدام في مكان آخر في التطبيق.
إنشاء مقياس مخصص باستخدام MDC
في الخطوة التالية، يتطلب الأمر تعديل إعدادات المقاييس لتضمين العلامة المخصصة من MDC. يتم ذلك عن طريق إنشاء فئة جديدة تتجاوز DefaultClientRequestObservationConvention
كما في الشيفرة التالية:
class ExtendedWebClientRequestObservationConvention extends DefaultClientRequestObservationConvention {
@Override
public KeyValues getLowCardinalityKeyValues(ClientRequestObservationContext context) {
return super.getLowCardinalityKeyValues(context).and(customValue());
}
private KeyValue customValue() {
var customValue = Optional.ofNullable(MDC.get("customKey")).orElse(NONE_VALUE);
return KeyValue.of("customKey", customValue);
}
}
ومع ذلك، يُلاحظ أن قيمة customKey
دائمًا ما تُسجل كـ "none" مما يشير إلى أن قيمة MDC غير متاحة في خيط التنفيذ الحالي.
التعامل مع القيم الفارغة في MDC
تظهر هذه المشكلة نظرًا لأن عملية جمع المقاييس تحدث في خيط تنفيذي مختلف. لذا، يجب على المطور التفكير في كيفية نقل قيمة MDC إلى الخيط الجديد الذي يقوم فيه الميكرومتر بتصنيع الملاحظة. لحل هذه المسألة، يمكن استخدام حلول مثل نقل البيانات عبر استدعاءات الخودام أو استخدام مناطق سياقية مناسبة.
بدائل لاستخدام MDC
بدلاً من ذلك، يمكن التفكير في استخدام خيارات أخرى لتمرير قيم العلامات المخصصة مباشرةً خلال مكالمات WebClient دون الحاجة للاعتماد على MDC. يمكن ذلك عبر تهيئة متغيرات خلال استدعاءات API الخاصة بك، مما يسهل تضمين القيم المطلوبة مباشرة في المكالمات.
خاتمة
تحتاج إضافة علامات مخصصة لمقاييس WebClient في Spring Boot إلى طريقة صغيرة ومعرفة دقيقة بكيفية عمل MDC. من خلال النظر في تجارب مثل هذه، يمكن لمطوري البرمجيات تحسين طرق قياس الأداء وتقديم معلومات أفضل للتطبيقات الخاصة بهم. على الرغم من التحديات التي قد تواجه المطورين، يوفر Spring Boot أدوات فعالة خاتمة للمجالات مثل إدارة المقاييس والتسجيل. بالتالي، يعد الديناميكية والعلاقة بين مقاييس الأداء واستخدام MDC أمراً أساسياً لتحسين البرمجيات.
بينما يمكنك تجاوز بعض التعقيدات باستخدام أساليب بديلة، فإن الفهم الجيد لكيفية عمل كل عنصر يسهم في بناء تطبيقات أكثر كفاءة وفاعلية.