مقدمة إلى Spring Cloud Gateway
تم إصدار النسخة الرسمية من Spring Boot 2 منذ بعض الوقت. تعتمد Spring Cloud Gateway على Spring Boot 2 وهو مشروع جديد لـ Spring Cloud. يوفر المشروع بوابة API مبنية على النظام البيئي الربيعي ، بما في ذلك: Spring 5 و Spring Boot 2 ومفاعل المشروع. تم تصميم SPRING Cloud Gateway لتوفير وسيلة بسيطة وفعالة لإرسال واجهات برمجة التطبيقات وتزويدهم بمخاوف تقليدية مثل: الأمان والمراقبة/المقاييس والمرونة. الإصدار الأخير الحالي هو v2.0.0.m8 ، وسيكون الإصدار الرسمي هنا قريبًا.
ميزات SPRING Cloud Gateway:
مقابل Netflix Zuul
يعتمد Zuul على Servlet 2.5 (باستخدام 3.x) ، باستخدام واجهة برمجة تطبيقات الحظر. لا يدعم أي اتصالات طويلة مثل WebSockets. بينما تم تصميم Gateway على Spring Framework 5 ، و Project Reactor ، و Spring Boot 2 ، باستخدام واجهة برمجة تطبيقات غير محبوطة. يتم دعم WebSockets وستكون تجربة تطوير أفضل لأنها مدمجة بإحكام مع الربيع.
ممارسة مقدمة بوابة سحابة الربيع
قام المؤلف مؤخرًا بدراسة الكود المصدري لـ Spring Cloud Gateway ، وقد كتب مقالات حول تحليل رمز المصدر لمعظم الوظائف ، ولكن لم يتم إصدار الإصدار الرسمي بعد كل شيء. هذه المقالة هي ممارسة تمهيدية ، تُظهر العديد من الوظائف الشائعة الاستخدام ، وتتطلع إلى إصدار أحدث إصدار رسمي.
مثال يبدأ خدمتين: خادم البوابة وخادم المستخدم. سيناريو المحاكاة هو أن العميل يطلب خدمة الواجهة الخلفية وأن البوابة توفر مدخلًا موحدًا لخدمة الواجهة الخلفية. جميع خدمات الواجهة الخلفية مسجلة لدى الخدمة والقنصل الذي تم العثور عليه (كلاهما Build ZK و Eureka على ما يرام ، وأنا معتاد أكثر على استخدام القنصل). تتقدم البوابة إلى خدمات خلفية محددة من خلال موازنة التحميل.
خدمة المستخدم
يتم تسجيل خدمة المستخدم مع القنصل وتوفر واجهة/اختبار.
يعتمد
التبعيات المطلوبة على النحو التالي:
<Rependency> <roupeD> org.springframework.cloud </rougiD> <intifactid> اكتشاف النجوم الرباعي-الاكتشاف </inchifactid> </repreadency> dependency> <groupid> org.springframework.boot </groupid>
ملف التكوين
الربيع: التطبيق: الاسم: سحابة خدمة المستخدم: استشارة: المضيف: 192.168.1.204 المنفذ: 8500 الاكتشاف: ip-address: $ {host_address: localhost} المنفذ: $ {server_port: $ {server.port}} HealthChecpath: /HealthCheckInterval: 15s extal-ever 8005Management: الأمان: ممكّن: خطأفضح الواجهة
@springbootapplication@restController@enableScoveryClientpublic GatewayUserApplication {public static void main (string [] args) {springapplication.run (GatewayUserApplication.class ، args) ؛ } getMapping ("/test") public string test () {return "ok" ؛ }}فضح/اختبار واجهة وإرجاع موافق.
خدمات البوابة
توفر Gateway Service مجموعة متنوعة من تكوينات التوجيه ، ومصانع التوجيه التوجيه ، ومصانع التصفية.
يعتمد
التبعيات التي تحتاج إلى تقديم:
<Rependency> <roupend> org.springframework.boot </rougiD> <insifactid> spring-boot-actuator </attifactid> </premined> // التبعية على WebFlux ، من الضروري تقديم <sependency> <roupencid> org.springframewwork.boot </group> <StifactId> Spring-boot-Starter-Webflux </stifactid> </reperency> <reperency> <roupiD> org.springframework.cloud </groupid> <Stifactid> <roupl> org.springframework.cloud </groupId> <ChotifactId> الاكتشاف النجوي النمطي السفلي </charifactid> <sophy> 2.0.0.m6 </sperive> <spressions> <SectiD> <rouciD> org.springframewwork. </simpusion> </arvisions> </sependency> // kotlin dependency <redence> <roupiD> org.jetbrains.kotlin </groupId> <trofactid> kotlin-stdlib </semptactid> <sperive> $ {kotlin.version} </appros <ProwEd> org.jetbrains.kotlin </rougiD> <StifactId> kotlin-reflect </attifactid> <sophy> $ {kotlin.version} </version> <cential> true </perical> </preminent>كما ذكر أعلاه ، يتم تقديم التبعيات المتعلقة بـ Kotlin ، ويجب دعم تكوين التوجيه لـ Kotlin هنا. يتطلب استخدام SPRING Cloud Gateway استبعاد التكوينات المتعلقة بالويب. يقدم إشارات إلى WebFlux. سيتم التحقق منه عند بدء التطبيق ويجب تقديمه.
توجيه مصنع التأكيد
هناك العديد من أنواع مصانع التوجيه التوجيه ، اعتمادًا على وقت الطلب ، والمضيف ، والمسار ، والطريقة ، وما إلى ذلك. التعريف التالي هو مطابقة للتأكيد على المسار.
BeAnpublic RouterFunction <ServerResponse> testFunRouterFunction () {RouterFunction <RoverResponse> route = RouterFunctions.Route (requestPredicates.Path.Path ("/testfun") ، request -> serverResponse.ok (). مسار العودة ؛}عندما يكون المسار المطلوب /testFun ، يتم إرجاع رمز الحالة الخاص بـ OK مباشرة ، وجسم الاستجابة عبارة عن سلسلة مرحبًا.
مرشح مصنع
غالبًا ما تحتاج البوابات إلى تصفية طلبات التوجيه وإجراء بعض العمليات ، مثل بناء الرؤوس بعد المصادقة. هناك العديد من أنواع التصفية ، مثل إضافة رؤوس الطلبات ، وإضافة معلمات الطلب ، وإضافة رؤوس الاستجابة وقواطع الدوائر ، إلخ.
beanpublic rotectelocator customRoutElocator (RoutElocatorBuilder Builder ، TherottleGatewayFilterfactory Throttle) {//@formatter: Off Return Builder.Routes () .Route (r - .ri ("http://httpbin.org:80")) .build () ؛ //@formatter: on}على النحو الوارد أعلاه ، عندما يكون مسار الطلب هو/picture/webp ، يتم إعادة توجيه الطلب إلى http://httpbin.org:80 ، ويتم ترشيح الاستجابة ، مع إضافة رأس الاستجابة x-anotherheader: baz.
توجيه مخصص
ينتمي القسان الفرعيان أعلاه إلى توجيه API المخصص ، ويمكن أيضًا تحديده من خلال التكوين:
الربيع: السحابة: البوابة: المحدد: ممكّن: المرشحات الافتراضية الحقيقية:-AddResponseHeader = X-ReSponse-Default-Foo ، مسارات بار الافتراضية: # ======================================================================================================================================================== ======================================================================================================================================================== ======================================================================================================================================================== ================================================================================================================================================
يحدد التكوين أعلاه التوجيه والمرشحات. يضيف المرشح العالمي جميع الاستجابات إلى رأس X-RESPONSE-DEFAULT-FOO: BAR الافتراضي. يتم تعريف المسار مع ID default_path_to_http ، لكن الأولوية منخفضة نسبيًا. عندما لا يمكن أن يتطابق الطلب ، سيتم إرساله إلى blueskykong.com.
Kotlin توجيه مخصص
يمكن لـ Spring Cloud Gateway استخدام Kotlin لتخصيص التوجيه:
@configurationClass إضافية {bean fun fun extrarouteLocator (builder: RoutElocatorBuilder): RoutElocator = builder.routes {id (id = "test-kotlin") {path ("/image/png") filters {addresponsehead ("x-testheader" ، " uri ("http://httpbin.org:80")}}}عندما يكون المسار المطلوب هو/صورة/png ، سيتم إعادة توجيهه إلى http://httpbin.org:80 ، ويتم تعيين مرشح ، ويتم إضافة رأس testheader: يتم إضافة رأس Foobar إلى رأس الرد الخاص به.
مكونات اكتشاف الخدمة
جنبا إلى جنب مع تسجيل الخدمة في مكون الاكتشاف ، تم إعادة توجيهه إلى مثيل الخدمة المحددة من خلال ServiceId. تم تقديم التبعيات المقابلة في التكوين السابق.
beanpublic RoutedEfinitionLocator discoveryclientRoutEdefinitionLocator (DiscoveryClient DiscoveryClient) {return new DiscoveryClientRoutedEfinitionLocator (DiscoveryClient) ؛} حقن discoveryclient في مُنشئ DiscoveryClientRoutEdefinitionLocator. سيتم شرح تحليل رمز المصدر لاحقًا ، ولن يتم توسيعه هنا.
الربيع: السحابة: البوابة: المحدد: ممكّن: المرشحات الافتراضية الحقيقية:-AddResponseHeader = X-ReSponse-Default-Foo ، مسارات بار الافتراضية: # =================================================================================== = - Stripprefix = 1
يتيح التكوين أعلاه تنفيذ محدد موقع DiscoveryClient. يحدد المسار أن جميع الطلبات التي تبدأ مع /المستخدم سيتم إرسالها إلى خدمة المستخدم ، وسيتم تطبيق مرشح المسار لاعتراض الجزء الأول من بادئة المسار. أي أن الطلب الفعلي للوصول/المستخدم/الاختبار يتم تحويله إلى LB: // user/test.
WebSocket
يمكنك أيضًا تكوين توجيه بوابة WebSocket:
الربيع: السحابة: بوابة: المرشحات الافتراضية:-AddResponseHeader = X-ReSponse-Default-Foo ، مسارات شريط الافتراض:-ID: WebSocket_test uri: ws: // localhost: 9000 ترتيب: 9000 متوقع:-path =/echo
ابدأ خادم WS WSCAT -Listen 9000 ، وابدأ البوابة (منفذ البوابة هو 9090) ، وقم بتوصيل العميل بـ WSCAT -Connect WS: // localhost: 9090/echo.
وصول العميل
يمكن للقراء تنزيل التعليمات البرمجية المصدر لتجربة الوظائف أعلاه. هنا أعرض فقط نتائج الوصول إلى خدمات المستخدمين:
تم تحميل البوابة بنجاح متوازن لخادم المستخدم وعاد موافق. يحتوي رأس الاستجابة على رأس إعدادات المرشح العالمي X-deponse-default-foo: الافتراضي bar
لخص
في هذه المقالة ، نستكشف بعض الميزات والمكونات التي تنتمي إلى SPRING Cloud Gateway. توفر واجهة برمجة التطبيقات الجديدة هذه أدوات خارج الصندوق لدعم Gateway و Proxy. نتطلع إلى الإصدار الرسمي من Spring Cloud Gateway 2.0.
عنوان رمز المصدر
https://github.com/keets2012/spring-cloud_samples
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.