مقدمة
Zuul هو جهاز توجيه مستند إلى Netflix JVM وموازن تحميل من جانب الخادم. سيناريو الأكثر شيوعًا هو استبدال الخدمات المجهرية للوكالة الخلفية Nginx للعكس للوصول إلى واجهة المستخدم في الواجهة الأمامية.
يستخدم Zuul شريطًا لتحديد موقع مثيل يتم توجيهه بواسطة Discovery ، ويتم تنفيذ جميع الطلبات باستخدام أمر Hystrix ، لذلك سيتم عرض الفشل في مقياس Hystrix.
ملاحظة: لا يتضمن Zuul عميل Discovery ، لذلك بالنسبة للطرق المستندة إلى معرف الخدمة ، يجب توفير أحد الطرق في ClassPath.
Zuul هي بوابة API ومكون تصفية توفرها Spring Cloud. يوفر الوظائف التالية:
في هذا البرنامج التعليمي ، سنستخدم Zuul لإعادة توجيه طلب/منتج الويب إلى خدمة المنتج المقابلة ، وتحديد مرشح مسبق للتحقق مما إذا كان قد تم إعادة توجيه Zuul.
البيئة الأساسية
رمز مصدر المشروع
انقر هنا
إنشاء خدمة zuul
إنشاء مشروع Maven في Intellij:
ثم أضف الكود التالي في pom.xml:
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 1.0-snapshot </version> <parent> <roupiD> org.springframework.boot </rougiD> <intifactid> spring-boot-starter-parent </stiftId> <splect> تم تغييره ، قبل: Spring-Cloud-Starter-Zuul-> <Stifactid> Spring-Cloud-Starter-Netflix-Zuul </stifactid> </reperence> <preented> <roupl> org.springframework.cloud </groupid> <roupl> org.springframework.cloud </rougiD> <StifactId> Spring-Cloud-Cloud-Config </stifactid> </breymed> <redence> <roupiD> org.springframework.boot </rougiD> <roupl> org.springframework.boot </groupId> <StifactId> Spring-Boot-Starter-Web </stifactid> </sependency> </sependency> </rempency <StifactId> يعاني من عمليات الاعتماد على الربيع </intifactid> <sored> finchley.m9 </version> <type> pom </type> <scope> استيراد </scope> </sependency> </respency> </rependencility> </sirection> <java.version> 1.8 </java. <roupl> org.springframework.boot </groupId> <StifactId> Spring-boot-maven-plugin </attifactid> </sugionins> </build> <spositories> <ropository> <id> spring-milestons </id> <name> صفقات الربيع </name> <Url> https://repo.spring.io/libs-milestone </url> <tipshots> <تمكين> خطأ </enabled> </snapshots> </ropository> </ropository> </ropository>
تجدر الإشارة إلى أن Artifactid of Zuul الذي قدمه البرنامج التعليمي الرسمي لـ Spring هو SPRING-Cloud-Starter-Zuul ، وهو اسم الإصدار القديم من Zuul. تم إعادة تسمية Spring-Cloud-Starter-Netflix-Zuul في نسختنا finchley.m9.
أضف SRC/Main/Resources/bootstrap.yml وحدد spring.application.name:
الربيع: التطبيق: الاسم: زول خادم
إنشاء فئة cn.zxuqian.application:
Package cn.zxuqian ؛ استيراد cn.zxuqian.filters.prefilter ؛ استيراد org.springframework.boot.springapplication ؛ import org.springframework.boot.autoconfigure.springbringblication ؛ org.springframework.cloud.netflix.zuul.enablezuulproxy ؛ استيراد org.springframework.context.annotation.bean args) ؛ } bean premilter premilter () {return new prefilter () ؛ }}هنا يتم استخدام enablezuulproxy لتحديد وكيل عكسي باستخدام Zuul وإعادة توجيه طلبنا إلى الخادم المقابل. ثم تم تمكين اكتشاف خدمة يوريكا. سيستخدم Zuul أيضًا Ribbon لموازنة التحميل افتراضيًا ، بحيث يمكنك اكتشاف الخدمات المسجلة من خلال Eureka. Preflter هو مرشح مسبق يقوم ببعض العمليات قبل معالجة الطلب. رمزه كما يلي:
package cn.zxuqian.filters ؛ استيراد com.netflix.zuul.zuulfilter ؛ استيراد com.netflix.zuul.context.requestContext javax.servlet.http.httpservletrequest ؛ فئة premlter public يمتد Zuulfilter {private static logger log = loggerfactory.getLogger (premilter.class) ؛ Override public string filterType () {return "pre" ؛ } Override public int filterorder () {return 1 ؛ } Override public boolean shouldfilter () {return true ؛ } Override Public Object Run () يلقي zuulexception {requestContext ctx = requestContext.getCurrentContext () ؛ httpservletrequest request = ctx.getRequest () ؛ log.info (string.format ("٪ s method request ٪ s" ، request.getMethod () ، request.getRequesturl (). toString ())) ؛ العودة لاغية. }} FilterType - هناك أربعة أنواع مرشحات مدمجة في Zuul و Pre و Route و Post و Error ، والتي تمثل قبل ، أثناء ، وبعد ، وبعد خطأ.
Filterorder - يحدد الترتيب الذي يتم فيه تنفيذ المرشح.
يجب أن يوضح - ما إذا كان لتمكين هذا المرشح.
تشغيل - منطق العمل للمرشح. أنا هنا ببساطة قم بتسجيل طريقة الطلب ومسار طلب reqeust.
بعد ذلك ، قم بإنشاء ملف zuul-server.yml في مستودع GIT في مركز التكوين الخاص بنا وأضف التكوين التالي:
الخادم: المنفذ: 8083zuul: المسارات: المنتجات: المسار: /منتج /** خدمة: خدمة المنتج
هنا ، تم تكوين منفذ Zuul ليكون 8083 ، ثم يتم تعيين جميع / المنتجات / الطلبات لخدمة خدمة المنتج الخاصة بنا. إذا لم يتم تكوين ServiceId ، فسيكون مفتاح المنتجات هو ServiceId افتراضيًا. في مثالنا ، يتضمن ServiceId -، لذلك يتم تحديد ServiceId أدناه. إرسال إلى GIT بعد اكتمال التكوين.
تحديث ProductService
تم تغيير Uri of Productservice قليلاً لجعله أكثر تمشيا مع نمط الراحة:
requestmapping (" /list") protect string productlist () {log.info ("Access to /Products Endpoint") ؛ العودة "معطف ، سترة ، سترة ، تي شيرت" ؛}هنا ، يتم تغيير المسار مطابقة @requestmapping إلى /قائمة ، والذي كان سابقًا /منتجات.
قم بتحديث عميل الويب
أضف طريقة جديدة إلى Productservice في عميل الويب الخاص بنا:
Public String ProductListzuul () {return this.restTemplate.getForObject ("http: // zuul-server/product/list" ، string.class) ؛}هذه المرة نطلب مباشرة خدمة Zuul-Server ، وبعد ذلك سوف تستند إلى طلبنا إلى خدمة خدمة المنتج. أخيرًا ، أضف طريقة معالجة الطلب في ProductController:
requestmapping ("/product/list") السلسلة العامة productlistzuul () {return productervice.productlistzuul () ؛}تستخدم لمعالجة /طلبات المنتج /القائمة ، ثم استدعاء أساليب في فئة Productervice.
امتحان
استخدم MVN Spring-Boot: Run لبدء ConfigServer ، السجل ، Zuulserver ، Productervice ، ومشاريع الويب ، ثم بدء تشغيل Productervice ، واستخدم Server_port = 8082 Spring-Boot: Run.
تفضل بزيارة http: // localhost: 8080/product/list عدة مرات ، بالإضافة إلى رؤية النتائج التي تم إرجاعها في المتصفح ، سنرى أيضًا الكلمات التالية في نافذة سطر الأوامر لـ Zuulserver:
الحصول على طلب طلب http: // xuqians-imac: 8083/منتج/قائمة
ثم في سطر الأوامر النوافذ لـ اثنين من productervices ، سنرى أيضًا مظاهر عشوائية
الوصول إلى /المنتجات نهاية المنتجات
هذا يعني أن Zuulserver ستعمل تلقائيًا على تحميل الموازنة.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.