Spring Cloud هي مجموعة مرتبة من سلسلة من الأطر. ويستخدم راحة تطوير SPRING BOOT لتبسيط تطوير البنية التحتية للموزع بذكاء ، مثل تسجيل اكتشاف الخدمة ، مركز التكوين ، ناقل الرسائل ، موازنة التحميل ، قواطع الدوائر ، مراقبة البيانات ، وما إلى ذلك ، والتي يمكن بدءها ونشرها بنقرة واحدة باستخدام نمط تطوير SPRING BOOT. الربيع لا يصنع العجلات بشكل متكرر. فهو يجمع فقط بين أطر الخدمات الناضجة والعملية نسبيا التي طورتها مختلف الشركات. إنه يعيد تعزيز التكوينات المعقدة ومبادئ التنفيذ من خلال نمط التمهيد الربيعي ، ويترك المطورين في نهاية المطاف مع مجموعة أدوات تطوير النظام الموزعة البسيطة وسهلة الفهم وسهلة النشر وسهلة الحفاظ على مجموعة أدوات تطوير النظام الموزعة.
بعد ذلك ، سوف نستخدم SpringCloud لتنفيذ بنية خدمة microservice بسيطة.
تم فتح جميع الرموز التالية من الحصول على github ، العنوان: https://github.com/lynnlovemin/sofservice
يوريكا (تسجيل الخدمة والاكتشاف)
أولا إدخال حزم التبعية ذات الصلة
<Arnal> <roupl> org.springframework.boot </groupid> <intifactid> Spring-boot-starter-parent </shintifactid> <الإصدار> 1.5.9. <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> <Groper> org.springframework.cloud </rougiD> <StifactId> Spring-Cloud-Cloud-eureka </stifactid> </reperence> <reperence> <roupiD> org.springframework.cloud </rougiD> <roughid> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-web </shotifactid> </premited> <reperation> <roupiD> org.springframework.boot </groupid> </reperency> </sependency> <reperency> <roupiD> org.springframework.cloud </rougiD> <StifactId> تعبيد السحابة الزنبركية </intifactid> <sored> dalston.rc1 </reghing> pom </type> <uccedins> <roupl> org.springframework.boot </rougiD> <insifactid> Spring-Boot-Maven-Plugin </shintifactid> </sultin> </plugins> </build> <spositories> <spository> <Url> https://repo.spring.io/milestone </url> <tafshots> <تمكين> خطأ </تمكين
تكوين application.yml
الخادم: المنفذ: 8761EUREKA: مثيل: اسم المضيف: العميل المحلي: registerwitheureka: false fetchregistry: false serviceurl: defaultZone: http: // $ {eureka.instance.hostname}: $ {server.port}/eureka/إنشاء تطبيق فئة بدء التشغيل
@enableeurekaserver@springbootapplicationpublicpublic application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }} قم بتشغيل الطريقة الرئيسية وزيارات المتصفح: http: // localhost: 8761 ، ويمكننا رؤية الواجهة التالية في المتصفح:
وهذا يعني أن يوريكا قد بدأت بنجاح.
بعد ذلك ، ندرك توازن الديون ، قاطع الدائرة ، بوابة ، والعميل. يجب تسجيل جميع الخدمات في Eureka ، ومن خلال زيارة Eureka ، يمكنك رؤية جميع الخدمات المسجلة.
العميل (العميل)
pom.xml
<Arnal> <roupl> org.springframework.boot </groupid> <intifactid> Spring-boot-starter-parent </shintifactid> <الإصدار> 1.5.9. <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> <roupl> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Cloud-eureka </stifactid> </syperency> <reperence> <roupiD> org.springframework.boot </groupid> <roupl> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-test </artifactid> <scope> test </scope> </sependency> </sependency> </sependencies> <sedenceManagement> <StifactId> تعتمد على السحر الزنبركي </intifactid> <sophy> dalston.rc1 </version> <type> pom </type> <scope> استيراد </scope> </sependency> </remidency> </respring> </premidency> <StifactId> Spring-boot-maven-plugin </shintifactid> </suncloy> </sugionins> </bustitories> <spository> <id> spring-milestones </id> <name> milestons </same> <Url> https://repo.spring. </spleshots> </ropository> </ropository> </ropository> </ropository> </ropository> </ropository>
application.yml
Eureka: العميل: ServiceUrl: DefaultZone: http: // localhost: 8761/eureka/#register هنا في خادم يوريكا: المنفذ: 8763Spring: التطبيق: الاسم: الخدمة-هيى
فئة التطبيق
@springbootapplication@enableeurekaclient@restControllerPublic Application {public static void main (string [] args) {springapplication.run (applicatioin.class ، args) ؛ } value ("$ {server.port}") منفذ السلسلة ؛ // هنا نقدم واجهة @requestmapping ("/hi") السلسلة العامة (اسم سلسلة requestparam) {return "hi"+name+"، أنا من المنفذ:"+منفذ ؛ }}Feign (رصيد الديون ، قاطع الدائرة)
pom.xml
<Arnal> <roupl> org.springframework.boot </groupid> <intifactid> Spring-boot-starter-parent </shintifactid> <الإصدار> 1.5.9. <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> <roupl> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Cloud-eureka </stifactid> </syperency> <reperence> <roupiD> org.springframework.boot </groupid> <roughid> org.springframework.cloud </rougiD> <StifactId> Spring-Cloud-Starter-Feign </stifactid> </siredency> <seperency> <roupiD> org.springframework.boot </roucidid> <roupl> org.springframework.cloud </groupId> <Stifactid> Spring-Cloud-Cloud-Hystrix-dashboard </shotifactid> </sependency> <sependency> groupid> org.springframework.boo </groupiD> </reperency> </sependency> </reperence> <RependencyManagement> <redence> <redency> <roupiD> org.springframework.cloud </groupId> <StifactId> صرف السود الفضائي </reft> </splence> intifactId> <sperence> dalston.rc1 </version> pom </type </scope> </redencedmanagement> <build> <uccedins> <clupin> <roupiD> org.springframework.boot </rougiD> <StifactId> spring-boot-maven-plugin </spring-milisin> </plugins> </build> <Url> https://repo.spring.io/milestone </url> <snapshots> <تمكين> خطأ </تمكين
application.yml
Eureka: العميل: ServiceUrl: DefaultZone: http: // localhost: 8761/eureka/server: المنفذ: 8765Spring: التطبيق: الاسم: service-feignfeign: Hystrix: ممكّن: TRUE
فئة التطبيق
@SpringBootApplication@enableScoveryClient@enablefeignclients@enableHyStrixDashboardPublic Application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }}ثم تقديم خدمة ، وظيفتها هي القيام بتوازن الديون ووظائف قاطع الدائرة
feignclient (value = "service-hi" ، froprack = schedualServiceHihyStrict.class) الواجهة العامة SchedualServicehi {REquestMapping (value = "/hi" ، method = requestMethod.get) سلسلة sealhhifromclientone ( @requestparam (value = "name") ComponentPublic Class Class SchedualServiceHiStrict تنفذ SchedualServicehi {Override Public String SealhhifromclientOne (اسم السلسلة) {return "sorr"+name ؛ }}FeignClient نحدد الاسم: Service-Hi ، المحدد عند إنشاء العميل من قبل. وبهذه الطريقة ، عندما نبدأ العديد من العملاء ، يمكننا أن نرى أنه سيتم الوصول إلى منافذ التظاهر المختلفة بالتناوب عند طلب HTTP. عند إيقاف العميل ، سيعيد الوصول إلى الواجهة رسالة خطأ.
زول (بوابة الخدمة)
بشكل عام ، لن نعرض العميل مباشرة للعالم الخارجي ، ولكن توجيهه من خلال بوابة الخدمة. يتم توصيل الخدمات الداخلية داخل شبكة المنطقة المحلية ولا يمكن الوصول إليها من العالم الخارجي. من خلال بوابة الخدمة ، يمكننا أيضًا إجراء التحقق من أمان الواجهة والاعتراض بشكل موحد. يرجى الاطلاع على الرمز:
pom.xml
<Arnal> <roupl> org.springframework.boot </groupid> <intifactid> Spring-boot-starter-parent </shintifactid> <الإصدار> 1.5.9. <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> <roupl> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Cloud-eureka </stifactid> </syperency> <reperence> <roupiD> org.springframework.boot </groupid> <roupl> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Starter-Zuul </stifactid> </premited> <reperation> <roupiD> org.springframework.boot </groupid> </reperency> <RependencyManagement> <redency> <redency> <roupiD> org.springframework.cloud </groupId> <StifactId> تعتمد على السحابة الزنبركية </scope> </scope> </remagger> </repiness> </repiness> </repiness> </repination> <Nudgle> <ucplins> <roupiD> org.springframework.boot </rougiD> <Stifactid> Spring-boot-maven-plugin </shintifactid> </spliexin> </spliex> </build> <Spositories> <Url> https://repo.spring.io/milestone </url> <splishots> <تمكين> خطأ </تمكين
application.yml
Eureka: العميل: ServiceUrl: DefaultZone: http: // localhost: 8761/eureka/server: المنفذ: 8080spring: التطبيق: الاسم: Service-Zuulzuul: المسارات: API-B: PATH:/API/** SERVISEID: SERVICE-FIGN #QUARES BRAGH API API API
فئة التطبيق
@enablezuulproxy@enableeurekaclient@SpringBootApplicationPublicpublic application {public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }}ابدأ التطبيق والوصول: http: // localhost: 8080/api/hi للوصول إلى الواجهة التي حددناها من قبل. بعد ذلك ، نعترض الواجهة:
/*** filterType: إرجاع سلسلة تمثل نوع المرشح. يتم تعريف أربعة أنواع مرشحات ذات دورات حياة مختلفة في Zuul ، على النحو التالي: قبل التوجيه: قبل التوجيه: عند توجيه المنشور: بعد خطأ التوجيه: إرسال خطأ ، فإن إرسال خطأ: Filterorder: يجب أن يكون ترتيب التصفية: هنا يمكنك كتابة حكم منطقي ، سواء كنت لتصفية ، هذه المقالة صحيحة ، مرشحًا إلى الأبد. تشغيل: المنطق المحدد للمرشح. من المعقد للغاية الاستخدام ، بما في ذلك التحقق من SQL و NOSQL لتحديد ما إذا كان الطلب لديه إذن للوصول. */@componentpublic class myfilter يمتد Zuulfilter {private static logger log = loggerfactory.getLogger (myfilter.class) ؛ Override public string filterType () {return "pre" ؛ } Override public int filterorder () {return 0 ؛ } Override public boolean shouldfilter () {return true ؛ } Override Public Object Run () {requestContext ctx = requestContext.getCurrentContext () ؛ httpservletrequest request = ctx.getRequest () ؛ log.info (string.format ("٪ s >>> ٪ s" ، request.getMethod () ، request.getRequesturl (). toString ())) ؛ Object AccessToken = request.getParameter ("Token") ؛ if (AccessToken == null) {log.warn ("الرمز المميز فارغ") ؛ ctx.setsendzuulresponse (false) ؛ CTX.SetResponsestatusCode (401) ؛ حاول {ctx.getResponse (). getWriter (). الكتابة ("الرمز المميز فارغ") ؛ } catch (استثناء e) {} return null ؛ } log.info ("ok") ؛ العودة لاغية. }} وبهذه الطريقة ، سنقوم أولاً بتنفيذ طريقة التشغيل في فئة MyFilter قبل الاتصال بالواجهة. في هذه الطريقة ، يمكننا القيام بسلسلة من التحقق الأمني ، مثل الرموز.
حسنًا ، تم بناء بنية دقيقة للخدمات الدقيقة.
تم فتح جميع الكود أعلاه من مصادر لـ GitHub ، العنوان: https://github.com/lynnlovemin/sofservice
ما سبق هو بنية الخدمات الدقيقة البسيطة التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر في الوقت المناسب.