بفضل اكتشاف تسجيل خدمة Eureka ، وقاطع دائرة Hystrix ، وموازنة تحميل مكالمات خدمة الشريط ، ومركز تكوين مجموعة سحابة الربيع ، يبدو أن إطار الخدمات المجهرية كاملة ، أخيرًا وليس آخرًا ، لا غنى عن بوابة الخدمة.
يعد توجيه Spring Cloud Zuul جزءًا لا يتجزأ من بنية الخدمات الصغيرة ، حيث توفر خدمات الحافة مثل التوجيه الديناميكي والمراقبة والمرونة والأمان ، إلخ.
مقدمة إلى زول
يلعب Zuul دور "Gateway الذكي" في إطار عمل Spring Cloud Microservices. من ناحية ، تعتبر Zuul بوابة وصول ، تلعب دور الوكيل العكسي ، وهو المدخل الوحيد للمستهلكين الخارجيين لطلب خدمات داخلية. من ناحية أخرى ، لدى Zuul وظائف تصفية. عن طريق حقن قواعد المرشح في وقت التشغيل ، يمكن أن يدرك مصادقة المستخدم ، والتوجيه الديناميكي ، وإصدار رمادي ، واختبار A/B ، والحد الحالي للوظائف والوظائف الأخرى.
يتم الانتهاء من معظم وظائف Zuul من خلال وظائف التصفية. يمكن أن يوفر Zuul أربعة أنواع قياسية من التصفية ، كما هو موضح في الشكل أدناه:
1) قبل: تصفية القواعد العمل قبل التوجيه. يمكنك استخدام مرشح "Pre" لتحقيق مصادقة المستخدم ، وسجلات طلب السجل ، وما إلى ذلك ؛
2) التوجيه: تصفية القواعد تسري عند التوجيه. يمكن استخدام التوجيه الديناميكي ، وإصدار رمادي ، واختبار A/B ، وحد حدود التيار ، وما إلى ذلك لتحقيق التوجيه الديناميكي ، وإصدار رمادي ، وأكثر من ذلك.
3) النشر: تسري قاعدة التصفية بعد التوجيه. يمكن استخدام مرشح "post" لجمع الإحصاءات والمقاييس ، وكتابة الخدمات الدقيقة المقابلة لاستجابة HTTP وإعادتها إلى مستهلك الخدمة ؛
4) الخطأ: سيحدث ذلك عندما يحدث خطأ أثناء عملية التوجيه لقاعدة التصفية. يمكنك استخدام مرشح الخطأ لتسجيل سجل الأخطاء وإجراء المعالجة الثانوية للخطأ ، إلخ.
تمرير الرسائل بين المرشحات باستخدام requestContext. يتضمن المحتوى المخزّن في requestContext عنوان الهدف التوجيه ، ومعلومات الخطأ ، ومعلومات الطلب ، ومعلومات الاستجابة ، وما إلى ذلك. يمكن أيضًا كتابة قواعد تصفية Zuul بلغة قائمة على JVM ، بما في ذلك Java و Python و Groovy ، إلخ.
1. مثال زول
استنادًا إلى العرض التوضيحي السابق ، سوف نوضح خدمة بوابة Zuul
1. إنشاء فئة بوابة
enablezuulproxyspringCloudapplication // دمج springbootapplication ، enablediscoveryclient ، enableCircuitBreaker الطبقة العامة zuulapplication {public static void main (string [] }}2. إضافة ملف تكوين الخصائص
spring.application.name = api-gateway server.port = 5555 zuul.routes.api-a.path =/api-a/** zuul.routes.api-a.serviceid = compute-service zuul.routes.api-b. eureka.client.serviceurl.defaultzone = http: // localhost: 1111/eureka/
أشير أيضًا إلى عنوان مركز تسجيل خدمة Eureka ، API-A.ServiceId ، نقطة B-ServiceID إلى اسم مزود الخدمة
3. تأثير الوصول
في الأصل ، تم الوصول إلى مثيل خدمة خدمة الحساب مباشرة من خلال http: // compute-service/add؟ a = 10 & b = 20 link. الآن ، يمكنك الوصول مباشرة إلى خدمة خدمة الحساب بواسطة LocalHost: 5555/API-A/ADD؟ A = 1 & B = 2 بوابة. وبالمثل ، توفر بوابة Zuul أيضًا وظيفة موازنة تحميل الخدمة ، وإرسال جميع الطلبات إلى مثيل خدمة الخدمة.
2. ما هي بوابة؟ لماذا تحتاج إلى استخدام بوابة؟
من خلال الشكل أعلاه ، تتعرض واجهة API مباشرة للمصلح دون بوابة. عندما يزداد عدد المتصلين ، يختلف المتصلين مختلفون ، ويتمكن من إضافة حقوق الوصول المخصصة والتحقق والمنطق الآخر. بعد إضافة بوابة API ، يتم إنشاء جدار بين المتصل الطرف الثالث ومزود الخدمة. يتواصل هذا الجدار مباشرة مع المتصل للتحكم في الإذن ، ثم يتم توازن الطلب مع خادم الواجهة الخلفية. مثلما لا توجد حاجة للوصول مباشرة إلى طريقة إضافة خدمة الحساب ، يتم تمرير الطلب إلى مثيل الخدمة من خلال رابط API-A/ADD. Zuul هي بوابة API التي توفر موازنة الحمل والوكيل العكسي ومصادقة الإذن.
على غرار NGINX إضافة جدار حماية في الواجهة الأمامية لخدمة التطبيق ، فإن موازنة تحميل Zuul مخصصة لتوزيع الطلبات على خدمة أو مثيل خدمة في الكتلة. يركز الشريط الذي تم تقديمه في وقت سابق أيضًا على وظائف تحميل الخدمة ، والتي تهدف إلى خدمة مستهلكي الخدمة الذين يقومون بتوزيع طلبات المكالمات على مثيل توفير خدمة معين. كلاهما موازنة تحميل ، والتي يتم تنفيذها بالفعل على مستويات مختلفة من النظام.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.