Spring Cloud هي أداة لتطوير التطبيقات السحابية تعتمد على Boot Boot. ويوفر طريقة تطوير بسيطة لإدارة التكوين ، واكتشاف الخدمة ، وقواطع الدوائر ، والتوجيه الذكي ، والمواد الدقيقة ، وحافلة التحكم ، والأقفال العالمية ، وحملات صنع القرار ، والجلسات الموزعة ، وإدارة ولاية الكتلة المشاركة في تطوير التطبيق السحابي القائم على JVM. إعادة تعبئة ودروع التكوينات المعقدة ومبادئ التنفيذ من خلال نمط التمهيد الربيعي ، وترك المطورين في نهاية المطاف مع مجموعة أدوات تطوير النظام الموزعة البسيطة وسهلة الفهم وسهلة الصيانة.
تشتمل Spring Cloud على العديد من المشاريع الفرعية (لمتعدة منتجات مختلفة مفتوحة المصدر تشارك في الأنظمة الموزعة) ، مثل Spring Cloud Config و Spring Cloud Netflix و Spring Cloudfoundry و Spring Cloud AWS و Spring Cloud Security و Spring Cloud Commons و Spring Cloud Zookeeper و Spring Cloud CLI وغيرها من المشاريع.
عنوان المشروع: https://github.com/yuezhongxin/spring-cloud-consul-same
تنفيذ ASP.NET Core 2.0 & Docker & Consul: https://github.com/yuezhongxin/hellodocker.sample
يستخدم موقع الاختبار الحالي ASP.NET Core لدمج Conusl و Fabio لبناء مجموعة الخدمات الدقيقة. نظرًا لأن التواصل بين كل خدمة يعتمد على بروتوكول REST HTTP ، يمكن أن يكون تطبيق الخدمة متعدد اللغات. دعنا نطور خدمة التمهيد الربيع ثم نستخدم Spring Cloud Consul لتسجيل الخدمة على الكتلة الحالية.
أداة تطوير Java التي اخترتها Idea Idea (MacOS تثبيت البرنامج التعليمي) ، والتي تستخدم حاليًا بشكل جيد للغاية (يستخدم نظام الألوان Darcula ، وحجم الخط 14) ، ويحتاج Java SDK إلى تنزيل وتثبيت إضافي (الإصدار 10 I المثبت).
نظرًا لأنني استخدمت Idea Intellij لأول مرة ، سأقوم بنشر عملية إنشاء مشروع بالتفصيل أدناه.
أولاً ، قم بإنشاء مشروع (حدد "Spring initializr" ، مشروع Boot Spring) ، وحدد Java SDK 10 افتراضيًا:
ثم املأ المعلومات الأساسية للمشروع (Artifact هي "عينة من زبدية السحابة" ، والبعض الآخر هم الافتراضي):
ملاحظة: Maven هي أداة لإدارة المشروع والبناء تحتوي على ثلاثة مكونات رئيسية: نموذج كائن المشروع (POM) ، ونموذج إدارة التبعية ، ودورة حياة البناء ، والمرحلة.
الفرق بين معرف المجموعة ومعرف القطع الأثرية. إذا تم اعتبار معرف المجموعة كشركة ، فيمكن اعتبار معرف Artifact قسمًا للشركة ، وهو ما يشبه إلى حد ما العلاقة بين الحلول والمكتبات الفئة في .NET. على سبيل المثال ، فإن معرف مجموعة Spring Cloud Project هو org.springframework.cloud ، ومعرف القطع الأثرية من القنصل السحابي الربيعي هو spring-cloud-starter-consul-discovery .
ما يلي هو نوع مشروع إنشاء SPRING BOOT (حدد تبعيات الويب):
ثم املأ اسم المشروع ودليل المشروع:
ثم انقر فوق "إنهاء" ويتم ذلك.
مثل تطوير تطبيق ASP.NET Core ، نحتاج إلى الرجوع إلى الحزم المختلفة أولاً ، وينطبق الشيء نفسه على مشاريع التمهيد الربيعي. نظرًا لأننا نستخدم Maven لإدارة التبعية ، نحتاج إلى تكوين التبعيات في pom.xml ، وتكوينها على النحو التالي:
<Arnal> <roupl> org.springframework.boot </rougiD> <insifactid> Spring-boot-starter-parent </shintifactid> <sored> 2.0.0.Release </version> <Rel0Path/> <!-Lookup Parent من المستودع-> </arner> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> <roughid> org.springframework.boot </rougiD> <StifactId> Spring-Boot-Starter-Web </shotifactid> </reperence> <reperence> <roupiD> org.springframework.cloud </groupid> <roupringid> org.springframework.boot </rougiD> <StifactId> Spring-boot-starter-actuator </intifactid> <scope> ترجمة </scope> </sependency> <redenced> <roupend> org.springframework.boot </groupid> <scope> اختبار </scope> </sependency> </rependencies> <RependencyManagement> <التبعية> <reperency> <roupiD> org.springframework.cloud </rougiD> <StifactId> spring-cloud-consul-dependency </shopactid> </premency> </تبعية> </respendencymanagement>
يتوافق spring-cloud-starter-consul-discovery مع القنصل السحابي الربيعي ، ويتم استخدام spring-boot-starter-actuator كشيك صحي (العنوان /actuator/health ). بالإضافة إلى ذلك ، يدعم المحرك أيضًا مراقبة المشاريع وإدارتها.
دعونا نتحدث عن دور العقد هنا:
parent : سوف يرث التكوين المرجعي الأصل تكوين مرجع الأصل.dependencies : التكوين المرجعي الحالي. إذا تم تكوين مرجع الأصل ، فسيتم الرجوع تلقائيًا إلى مشروع الطفل.dependencyManagement : بالطبع ، التكوين المرجعي. إذا تم تكوين مرجع الأصل ، فلن يتم الرجوع إلى مشروع الطفل تلقائيًا. يجب الرجوع إلى مشروع الطفل فقط عند استخدامه ، ولا يلزم رقم الإصدار. ثم نشر رمز SpringCloudConsulSampleApplication.java :
package com.example.springCloudConsulsample ؛ استيراد org.springframework.beans.factory.annotation. org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.restController ؛ استيراد org.springframework.cloud.client.discovery.enablecoveryclient ؛ استيراد org.springframework.cloud.client.discovery.discoveryClient ؛ eNipperisCoveryClient@restController@springbootapplicationpublicpublicpublicpublicpublicpublicpublicpublicpublication {autowired discoveryclient discoveryclient ؛ /*** احصل على جميع الخدمات*/ @requestmapping ("/services") خدمات الكائنات العامة () {return discoveryclient.getServices () ؛ } @requestmapping ("/home") public string home () {return "Hello World" ؛ } public static void main (string [] args) {springapplication.run (springCloudConsAlsampleApplication.class ، args) ؛ }} أضف @EnableDiscoveryClient enoutation. عندما يبدأ المشروع ، سيتم تسجيل خدمة Boot Spring الحالية.
عند تسجيل خدمة باستخدام ASP.NET Core ، سيتم ملء معلومات التكوين في الكود (مثل اسم الخدمة والمنفذ ، وما إلى ذلك ، وبالطبع يمكن أن تكون أيضًا في ملف التكوين) ، ثم سيتم تسجيل الخدمة باستخدام مكون القنصل (يسمى Consul HTTP REST).
إذا قمت بتسجيل خدمة باستخدام SPRING Cloud Consul ، فأنت بحاجة إلى إضافة ملف تكوين (ملف مورد مشروع Boot Project في دليل الموارد).
إضافة التكوين في application.properties :
Spring.Application.name = خدمة الربيع
ثم أضف ملف تكوين application.yml :
ثم أضف ملف التكوين application.yml: Debug: Trueserver: المنفذ: 24543Spring: Cloud: Conder: Host: Host: 127.0.0.1 Port: 8500 Discover: Register: True Hostname: urlprefix-/$ {spring.application.name} مثيل: $ {spring.application.name}: $ {vcap.application.يجب شرح التكوين أعلاه بالتفصيل:
debug هو ما إذا كان يجب تصحيح وضع التصحيح ، وإذا تم تعبئته ونشره ، فيجب ضبطه على false .server.port يوكي منفذ خدمة التمهيد الربيع.spring.cloud.consul.host/port يقوم بتكوين عنوان ومنفذ القنصل المحلي (يمكن استخدام كل من عقدة الخادم وعقدة العميل). سيتصل Spring Cloud Consul بواجهة REST Consul HTTP لتسجيل الخدمة.spring.cloud.consul.discovery.true تكوين ما إذا كان سيتم تسجيل خدمة عند البدء ،spring.cloud.consul.discovery.hostname يهيئ عنوان المضيف لخدمة Boot Service ، أو يمكن تكوينه بدون التكوين ، والعنوان المحلي الافتراضي هو.spring.cloud.consul.discovery.serviceName تكوين اسم خدمة القنصل المسجل. المتغير ${spring.application.name} هو التكوين الذي أضفناه في ملف تكوين application.properties أعلاه.spring.cloud.consul.discovery.healthCheckPath تكوين عنوان الفحص الصحي القنصل. يساعدنا مكون المشغل في تنفيذه ، لذلك لا نحتاج إلى تطبيق إضافي. يمكن رؤية العنوان في معلومات الطباعة عند بدء الخدمة.spring.cloud.consul.discovery.healthCheckInterval تكوين تردد الفحص الصحي القنصل ، أي تردد نبضات القلب.spring.cloud.consul.discovery.tags تكوين علامات خدمة التسجيل القنصل ، والتي تم تعيينها على تنسيق urlprefix-/serviceName ، ويتم تسجيلها تلقائيًا في مجموعة Fabio.spring.cloud.consul.discovery.instanceId تكوين معرف خدمة تسجيل القنصل.بعد الانتهاء من العمل أعلاه ، نحتاج أيضًا إلى بدء القنصل وفابيو محليًا
بعد ذلك ، يمكننا تصحيح المشروع مباشرة باستخدام IDEALIJ والضغط على Shift + F9 للتصحيح.
المذكورة أعلاه معلومات طباعة المشغل:
2018-03-28 10: 09: 54.645 info 63482 --- [MAIN] SBAWSWEBMVCENDPOINTHANDLERMPAPPAP java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandlermapping $ progenshandler.handle (
2018-03-28 10: 09: 54.646 info 63482 --- [MAIN] SBAWSWEBMVCENDPOINTHANDLERMAPPAPPAPPAPPAPPAPPAPP java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandlermapping $ progenshandler.handle (
2018-03-28 10: 09: 54.647 info 63482 --- [MAIN] SBAWSWEBMVCENDPOINTHANDLERMAPPAPPAPPIP java.util.map <java.lang.string ، java.util.map <java.lang.string ، org.springframework.boot.actuate.endpoint.web.link >> org.springframework.boot.actuate.endpoint.web.servlet.webmvcendpointhandlermapping.links (javax.servlet.http.httpservletrequest ، javax.servlet.http.httpletresponse)
أو يمكننا استخدام Maven لتعبئة الإصدار وبدء الخدمة مع الأمر. يمكنك استخدام Maven في Idea Intellij لتعبئتها ، أو استخدام أمر Maven لتعبئته. هنا نستخدم الأمر Maven لتعبئته.
عندما قمنا بتثبيت Idea Intellij ، تم تثبيت Maven تلقائيًا ، ولكن سيجد ضرب mvn -v مباشرة أنه لا يمكن العثور على الأمر ، لذلك نحتاج إلى تكوين متغيرات البيئة.
دليل ملف Maven الخاص بي هو /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 ، والتي يمكن العثور عليها في إعدادات التكوين لفكرة Intellij ، ثم نقوم بتنفيذ الأمر التالي:
$ export m2_home = "/applications/intellij Idea.app/contents/plugins/maven/lib/maven3" && path path = $ path: $ m2_home/bin && chmod a+x "/applications/intellij idea.app/contents/plugins/maven/lib/maven3/mvn"
ثم تحقق مما إذا كان أمر maven يسري:
$ mvn -vapache maven 3.3.9 (BB52D8502B132EC0A5A3F4C09453C07478323DC5 ؛ 2015-11-11T00: 41: 47+08: 00) maven hom البائع: Oracle CorporationJava Home: /library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault locale: zh_cn_#hans ، platform inchoding: utf-8os name: "Mac OS X" ، الإصدار: "10.13.2" ، القوس:
pom.xml نقوم بتعديل debug:false في application.yml .
$ mvn package -dmaven.test.skip = true [info] مسح للمشاريع ... [معلومات] [معلومات] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ عينة زبدية السحابة --- [معلومات] الحذف/المستخدمين/Xishuai/مستندات/ملفات المشروع/اختبار المشروع/عينة من زبدية السحابة/الهدف [info] --- maven-resources-plugin: 3.0.1: الموارد (الموارد الافتراضية) @ spring-cloud-consul --- نسخ 0 مورد [info] [info] --- maven-compiler-plugin: 3.7.0: ترجمة (infault-compile) @ spring-cloud-consul-sample --- [info] التغييرات التي تم اكتشافها-إعادة توحيد الوحدة النمطية! Maven-Resources-Plugin: 3.0.1: TestResources (testresources افتراضي) @ عينة من الربيع-Cloud-Consul-Sample --- [معلومات] لا نسخ موارد الاختبار [info] Maven-Surefire-Plugin: 2.20.1: اختبار (الاختبار الافتراضي) @ spring-cloud-consul-sample --- يتم تخطي الاختبارات [info] مشاريع/عينة زبدية-كل-سود-كونبون/الهدف/الربيع-con-consul-smarm-0.0.1-snapshot.jar [info] [info] --- Spring-boot-maven-plugin: 2.0.0.release: repackage (الافتراضي) @ spring-cloud-samp-sample --- [info] -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ستكون حزمة JAR التي تم إنشاؤها في الدليل المستهدف ، مع ملف File spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (التنسيق هو项目名+ 版本号) ، وبعد ذلك يمكننا بدء الخدمة مباشرة:
$ java -jar target/spring-cloud-consul-sample-0.0.1-snapshot.jar2018-03-28 10: 33: 31.750 info 63875 --- [main] تاريخ بدء التشغيل [الأربعاء مارس 28 10:33:31 CST 2018] ؛ جذر التسلسل الهرمي للسياق: حدثت عملية وصول عاكسة غير قانونية: وصول عاكس غير قانوني من قبل org.springframework.cglib.core.reflectutils $ 1 (جرة: ملف:/المستخدمين/Xishuai/Documents/Project/test المشروع/العينة الزراعية-con-consul/target/spring-cloud-consul-sample-0.0.1-snapshot.jar! /boot-inf/lib/spring-core-5.0.4.release.jar!/) إلى الطريقة java.lang.classloader.defineclass (java.lang.string ، byte [] ، int ، int ، java.security.protectiondomain) تحذير: يرجى النظر في الإبلاغ عن ذلك إلى محافظين من org. عمليات الوصول العاكسة: سيتم رفض جميع عمليات الوصول غير القانونية في إصدار مستقبلي 2018-03-28 10: 33: 31.971 info 63875 --- [Main] faautowiredannotationbeanpeanpostprocessor: jsr-330 'javax.inject.in ". 63875 --- [main] trationDelegate $ beanpostprocessterchecker: bean 'configurationPropertiesRebinderautoconFiguration' من النوع معالجتها من قبل جميع معالجات BeanPostProcessors (على سبيل المثال: غير مؤهل للحصول على proxying التلقائي). ____ __ _ /// ___'_ __ _ _ (_) _ __ __ _ / / / / / / / (() / ___ | '_ |' _ | // // // ___) | | _) | | | | | | || (_ | |))) '| ____ | .__ | _ | | _ | _ | | _/__ ، | ///// ======================================= ___/ =/ _/ _/ :: spring boot :: (v2.0.0.release)
تحقق مما إذا كان الفحص الصحي ناجحًا:
تحقق مما إذا كان تسجيل خدمة القنصل ناجحًا:
تحقق مما إذا كانت مجموعة Fabio تحتوي على خدمات:
بعد نجاح تسجيل الخدمة ، يمكننا اكتشاف الخدمة يدويًا ، أو اكتشافها من خلال مكون Spring Cloud Ribbon/Feign ، وتوفير وظائف موازنة التحميل (على غرار وظيفة Fabio) ، ثم درسها لاحقًا.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.