تتحدث هذه المقالة بشكل أساسي عن مكون تتبع الخدمة Zipkin ، ودمج Spring Cloud Sleuth مكون zipkin.
1. مقدمة
أضف Sleuth إلى ClassPath لتطبيق Boot Spring (انظر أدناه للحصول على أمثلة Maven و Gradle) ، وسترى بيانات الارتباط التي يتم جمعها في السجلات ، طالما أنك تسجل طلبات تسجيل.
- مقتطف من الموقع الرسمي
تتمثل الوظيفة الرئيسية لـ Spring Cloud Sleuth في توفير حلول تتبع في الأنظمة الموزعة ، وهي متوافقة مع Zipkin. تحتاج فقط إلى إدخال التبعيات المقابلة في ملف POM.
2. تتبع الخدمة وتحليلها
في بنية الخدمات الصغيرة ، يتم تقسيم الخدمات من خلال الخدمات. قد تتطلب الواجهة المعرضة للعالم الخارجي العديد من الخدمات للتعاون لإكمال وظيفة الواجهة هذه. إذا كانت أي خدمة على الرابط تواجه مشاكل أو مهلة الشبكة ، فستؤدي ذلك إلى فشل استدعاء الواجهة. مع استمرار التوسع في العمل ، ستصبح الدعوة بين الخدمات أكثر تعقيدًا.
مع توفر المزيد والمزيد من الخدمات ، سيصبح تحليل سلاسل المكالمات أكثر تعقيدًا. قد تكون علاقة الدعوة بينهما على النحو التالي:
ثالثا. شروط
الامتداد: وحدة العمل الأساسية. على سبيل المثال ، فإن إرسال RPC في فترة تم إنشاؤها حديثًا يعادل إرسال طلب استجابة إلى RPC. تم تحديد الفترة بشكل فريد من خلال معرف 64 بت ، ويتم تمثيل التتبع بمعرف 64 بت آخر. يحتوي SPAN على معلومات بيانات أخرى ، مثل Digest و TimeStamp Events و Ender Value Sterations (Tags) ومعرف Span ومعرف التقدم (عادة عنوان IP).
تبدأ الفترة باستمرار وتتوقف ، وفي الوقت نفسه يسجل معلومات الوقت. عندما تنشئ فترة ، يجب عليك إيقافه في وقت ما في المستقبل.
تتبع: بنية شجرة تتكون من سلسلة من الفترات. على سبيل المثال ، إذا كنت تقوم بتشغيل مشروع بيانات كبير موزع ، فقد تحتاج إلى إنشاء أثر.
التعليق التوضيحي: يستخدم لتسجيل وجود حدث في الوقت المناسب ، ويتم استخدام بعض التعليقات التوضيحية الأساسية لتحديد بداية ونهاية الطلب.
حدد عملية استخدام شرح zipkin في نظام واحد:
4. مشروع البناء
بعد شرح المعرفة الأساسية ، دعنا نأخذ العمل الفعلي. تتكون الحالة الواردة في هذه المقالة بشكل أساسي من ثلاثة مشاريع: خادم zipkin ، والذي يستخدم بشكل أساسي وظائف zipkinserver لجمع بيانات المكالمات وعرضها ؛ خدمة-التي تعرض واجهة HI إلى الخارج ؛ خدمة miya ، التي تكشف واجهة Miya إلى الخارج ؛ يمكن أن تسمى هاتان الخدمتين بعضهما البعض ؛ وفقط بعد استدعائها ، ستقوم Server-Zipkin بجمع البيانات ، وهذا هو السبب في أنه يسمى تتبع الخدمة.
4.1 بناء خادم zipkin
قم بإنشاء مشروع SPRING-BOOT المسمى Server-Zipkin ، وقم بتقديم تبعيات في POM:
<ependencies> <Rependency> <roupiD> org.springframework.boot </rougiD> <Stifactid> Spring-boot-starter </stifactid> </reperation> <reperency> <roupid> org.springframework.boot </rouplyid> <roughid> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-test </artifactid> <scope> اختبار </scope> </dependency> <remondency> <nuperid> io.zipkin.java </groupid> <roupl> io.zipkin.java </groupId> <StifactId> zipkin-autoconfigure-ui </insifactid> </sependency> </sependency> </sependency> <redence> <roupiD> org.springframework.cloud </groupid> <soph> camden.sr6 </version> <type> pom </type> <scope> استيراد </scope> </reperence> </repreadencies> </sependencymanagement>
في فئة إدخال البرنامج الخاصة به ، أضف التعليق التوضيحي enablezipkinserver لتمكين وظيفة zipkinserver:
@springbootapplication@enablezipkinserverpublic class serverzipkinapplication {public static void main (string [] args) {springapplication.run (serverzipkinapplication.class ، args) ؛ }}في تطبيق ملف التكوين. يحدد منفذ الخدمة على النحو التالي:
server.port = 9411
4.2 إنشاء خدمة-هاي
في مقدمة POM الخاصة بها ، يكون التبعية الأولية هو زبدية النجوم-زيبكين ، الرمز هو كما يلي:
<ependencies> <Rependency> <roupiD> org.springframework.boot </rougiD> <Stifactid> spring-boot-starter-web </stifactid> </premitency> <!-ترجمة ('org.springframework.cloud:spring-starter-zipkin' <Groper> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Starter-Zipkin </shintifactid> </premited> <reperation> <roupiD> org.springframework.boot </rougiD> </reperency> </premency> <redencedManagement> <redency> <redency> <roupiD> org.springframework.cloud </rougeid> <trifactid> صرف السحابة الزنبركية </scope> </premencymanagement>في تطبيق ملف التكوين الخاص به ، حدد عنوان خادم zipkin ، ويتم تحديد الرأس من خلال تكوين "spring.zipkin.base-url":
server.port = 8988spring.zipkin.base-url = http: // localhost: 9411spring.application.name = service-hi
لا بأس في تقديم تبعية زبدية النجمة-زيبكين وضبط spring.zipkin.base-url.
واجهة التعرض الخارجية:
@springbootapplication@restControllerPublic class serviceHiapplication {public static void main (string [] args) {SpringApplication.run (serviceHiapplication.class ، args) ؛ } logger final static static static = logger.getLogger (serviceHiapPlication.class.getName ()) ؛ @autowired private resttemplate resttemplate ؛ bean public resttemplate getRestTemplate () {return new restTemplate () ؛ } @requestmapping ("/hi") السلسلة العامة callhome () {log.log (level.info ، "calling trace service-hi") ؛ return resttemplate.getForObject ("http: // localhost: 8989/miya" ، string.class) ؛ } @requestmapping ("/info") معلومات السلسلة العامة () {log.log (level.info ، "calling trace service-hi") ؛ إرجاع "أنا خدمة-هاي" ؛ } bean public compleatesampler defaultSampler () {return new new amplysampler () ؛ }}4.3 إنشاء خدمة miya
عملية الإنشاء تؤلمني الخدمة ، وتقدم نفس التبعيات ، وتكوين spring.zipkin.base-url.
واجهة التعرض الخارجية:
@springbootapplication@restControllerPublic class servicemiyaapplication {public static void main (string [] args) {springapplication.run (servicemiyaapplication.class ، args) ؛ } سجل المسجل النهائي الثابت الخاص = logger.getLogger (servicemiyaapplication.class.getName ()) ؛ requestmapping ("/hi") public string home () {log.log (level.info ، "hi يتم استدعاؤه") ؛ العودة "مرحبًا أنا ميا!" ؛ } @requestmapping ("/miya") معلومات السلسلة العامة () {log.log (level.info ، "info تسمى") ؛ return resttemplate.getForObject ("http: // localhost: 8988/info" ، string.class) ؛ } autowired private resttemplate resttemplate ؛ bean public resttemplate getRestTemplate () {return new restTemplate () ؛ }}4.4 ابدأ المشروع ، وظهر وتتبع المسار
ابدأ المشاريع الثلاثة المذكورة أعلاه بدورها ، افتح المتصفح للوصول: http: // localhost: 9411/، وستظهر الواجهة التالية:
زيارة: http: // localhost: 8989/miya ، يظهر المتصفح: أنا خدمة hi
ثم افتح واجهة http: // localhost: 9411/انقر فوق التبعيات لاكتشاف تبعيات الخدمة:
انقر فوق "البحث عن آثار" لرؤية بيانات الخدمات المحددة التي تتصل ببعضها البعض:
قم بتنزيل الكود المصدري لهذه المقالة: https://github.com/forezp/springcloudlearning/tree/master/chapter9
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.