Spring Cloud เป็นเครื่องมือพัฒนาแอพพลิเคชั่นคลาวด์โดยใช้สปริงบูต มันมีวิธีการพัฒนาอย่างง่ายสำหรับการจัดการการกำหนดค่าการค้นพบบริการเบรกเกอร์วงจรการกำหนดเส้นทางอัจฉริยะตัวแทนไมโครบัสควบคุมการล็อคทั่วโลกแคมเปญการตัดสินใจเซสชันกระจายและการจัดการสถานะคลัสเตอร์ที่เกี่ยวข้องในการพัฒนาแอปพลิเคชันคลาวด์ที่ใช้ JVM การจัดทำใหม่และการป้องกันการกำหนดค่าที่ซับซ้อนและหลักการการใช้งานผ่านสไตล์การบูตฤดูใบไม้ผลิในที่สุดก็ออกจากนักพัฒนาด้วยความเรียบง่ายเข้าใจง่ายปรับใช้และง่ายต่อการบำรุงรักษาชุดเครื่องมือพัฒนาระบบแบบกระจาย
Spring Cloud มีโครงการย่อยหลายโครงการ (สำหรับผลิตภัณฑ์โอเพ่นซอร์สที่แตกต่างกันหลายรายการที่เกี่ยวข้องกับระบบกระจาย) เช่น Spring Cloud Config, Spring Cloud Netflix, Spring Cloud Cloudfoundry, Spring Cloud AWS, Spring Cloud Security, Spring Cloud Commons, Spring Cloud Zookeeper, Spring Cloud CLI และโครงการอื่น ๆ
ที่อยู่โครงการ: https://github.com/yuezhongxin/spring-cloud-consul-sample
การใช้งาน ASP.NET CORE 2.0 & Docker & Consul: https://github.com/yuezhongxin/hellodocker.sample
ไซต์ทดสอบปัจจุบันใช้ ASP.NET Core เพื่อรวม CONUSL และ Fabio เพื่อสร้างคลัสเตอร์ microservice เนื่องจากการสื่อสารระหว่างแต่ละบริการขึ้นอยู่กับโปรโตคอล HTTP REST การใช้บริการสามารถเป็นภาษาข้ามภาษาได้ มาพัฒนาบริการสปริงบูตแล้วใช้ Spring Cloud Consul เพื่อลงทะเบียนบริการไปยังคลัสเตอร์ที่มีอยู่
เครื่องมือพัฒนา Java ฉันเลือก Ideallij Idea (การสอนการติดตั้ง MacOS) ซึ่งปัจจุบันใช้งานได้ดีมาก (โทนสีใช้ Darcula ของระบบขนาดตัวอักษร 14) และ Java SDK ต้องการการดาวน์โหลดและการติดตั้งเพิ่มเติม
เนื่องจากฉันใช้ Intellij Idea เป็นครั้งแรกฉันจะโพสต์กระบวนการสร้างโครงการโดยละเอียดด้านล่าง
ขั้นแรกให้สร้างโครงการ (เลือก "Spring Initializr", Spring Boot Project) และเลือก Java SDK 10 โดยค่าเริ่มต้น:
จากนั้นกรอกข้อมูลพื้นฐานของโครงการ (สิ่งประดิษฐ์คือ "Spring-Cloud-Consul-Sample" อื่น ๆ เป็นค่าเริ่มต้น):
หมายเหตุ: Maven เป็นเครื่องมือการจัดการโครงการและการก่อสร้างที่มีองค์ประกอบสำคัญสามประการ: โมเดลวัตถุโครงการ (POM), รูปแบบการจัดการการพึ่งพา, วงจรชีวิตสร้างและเวที
ความแตกต่างระหว่าง ID กลุ่มและ ID สิ่งประดิษฐ์ หาก ID กลุ่มได้รับการยกย่องว่าเป็น บริษัท ARTIFACT ID ถือได้ว่าเป็นแผนก บริษัท ซึ่งค่อนข้างคล้ายกับความสัมพันธ์ระหว่างโซลูชันและห้องสมุดชั้นเรียนใน. NET ตัวอย่างเช่น ID กลุ่มของโครงการสปริงคลาวด์คือ org.springframework.cloud และ ID สิ่งประดิษฐ์ของกงสุลคลาวด์สปริงคือ spring-cloud-starter-consul-discovery
ต่อไปนี้เป็นประเภทโครงการสร้างสปริงบูต (เลือกการพึ่งพาเว็บ):
จากนั้นกรอกชื่อโครงการและไดเรกทอรีโครงการ:
จากนั้นคลิก "เสร็จสิ้น" แล้วก็เสร็จสิ้น
เช่นเดียวกับการพัฒนาแอปพลิเคชัน ASP.NET Core เราจำเป็นต้องอ้างอิงแพ็คเกจต่างๆก่อนและสิ่งเดียวกันก็เป็นจริงสำหรับโครงการสปริงบูต เนื่องจากเราใช้ Maven สำหรับการจัดการการพึ่งพาเราจึงต้องกำหนดค่าการพึ่งพาใน pom.xml และกำหนดค่าดังต่อไปนี้:
<carent> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Parent </artifactid> <version> 2.0.0.Release </เวอร์ชัน> <inelypath/> <! <Project.build.sourceencoding> UTF-8 </project.build.sourceencoding> <project.raporting.OutputUntencoding> UTF-8 </project.Reporting.outputencoding> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.cloud </groupid> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Actuator </artifactid> <pope> Compile </cope> </permentrency> <scope> ทดสอบ </cope> </derctency> </perctencies> <perdencyManagement> <การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.cloud </groupid> <ratifactid> Spring-Cloud-consul- พึ่งพา </artifactid> </dermentency> </dependencies> </dermentencyManagement>
การอ้างอิง spring-cloud-starter-consul-discovery สอดคล้องกับ Spring Cloud Consul และการอ้างอิง spring-boot-starter-actuator ใช้เป็นการตรวจสุขภาพ (ที่อยู่ /actuator/health ) นอกจากนี้แอคทูเอเตอร์ยังสนับสนุนการตรวจสอบและจัดการโครงการ
มาพูดคุยเกี่ยวกับบทบาทของโหนดที่นี่:
parent : การกำหนดค่าการอ้างอิงหลักจะสืบทอดการกำหนดค่าการอ้างอิงหลักdependencies : การกำหนดค่าอ้างอิงปัจจุบัน หากมีการกำหนดค่าการอ้างอิงหลักโครงการเด็กจะถูกอ้างอิงโดยอัตโนมัติdependencyManagement : แน่นอนการกำหนดค่าอ้างอิง หากมีการกำหนดค่าการอ้างอิงหลักโครงการลูกจะไม่ได้รับการอ้างอิงโดยอัตโนมัติ โครงการเด็กจะต้องมีการอ้างอิงเฉพาะเมื่อใช้และไม่จำเป็นต้องใช้หมายเลขเวอร์ชัน จากนั้นโพสต์รหัสของ SpringCloudConsulSampleApplication.java :
แพ็คเกจ com.example.springcloudconsulsample; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.boot.springapplication; นำเข้า org.springframework.boot.autoconfigure.springbootapplication; org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.restcontroller; นำเข้า org.springframework.cloud.client.discovery.enablediscoverycovery; org.springframework.cloud.client.discovery.discoveryclient;@enablecoverycelient@restcontroller@springbootapplicationpublic คลาส SpringcloudConsAlamplePplication /*** รับบริการทั้งหมด*/@requestmapping ("/บริการ") บริการวัตถุสาธารณะ () {return discoveryClient.getServices (); } @RequestMapping ("/home") Public String Home () {return "Hello World"; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (SpringCloudConsulAmpleApplication.class, args); - เพิ่มคำอธิบายประกอบ @EnableDiscoveryClient เมื่อโครงการเริ่มต้นบริการสปริงบูตปัจจุบันจะลงทะเบียน
เมื่อลงทะเบียนบริการโดยใช้ ASP.NET Core ข้อมูลการกำหนดค่าจะถูกกรอกในรหัส (เช่นชื่อบริการและพอร์ต ฯลฯ และแน่นอนว่ามันสามารถอยู่ในไฟล์การกำหนดค่า) จากนั้นบริการจะลงทะเบียนโดยใช้คอมโพเนนต์กงสุล (เรียกว่ากงสุล HTTP REST)
หากคุณลงทะเบียนบริการด้วย Spring Cloud Consul คุณจะต้องเพิ่มไฟล์การกำหนดค่า (ไฟล์ทรัพยากรโครงการสปริงบูตอยู่ในไดเรกทอรีทรัพยากร)
เพิ่มการกำหนดค่าใน application.properties :
Spring.application.name = Spring-Boot-Service
จากนั้นเพิ่มไฟล์การกำหนดค่า application.yml :
จากนั้นเพิ่มไฟล์กำหนดค่า Application.yml: Debug: Trueserver: พอร์ต: 24543Spring: คลาวด์: ที่ปรึกษา: โฮสต์: 127.0.0.1 พอร์ต: 8500 การค้นพบ: ลงทะเบียน: โฮสต์จริง: 10.9.10.215 ServiceName: $ {Spring.Application.Name urlprefix-/$ {spring.application.name} instanceid: $ {spring.application.name}: $ {vcap.application.instance_id: $ {spring.inplication.instance_id: $ {random.value}}}}}}}}}}}}}}}}}การกำหนดค่าข้างต้นจะต้องอธิบายอย่างละเอียด:
debug คือการดีบักโหมดและหากบรรจุและเผยแพร่จะต้องตั้งค่าเป็น falseserver.port กำหนดค่าพอร์ตของบริการ Spring Bootspring.cloud.consul.host/port กำหนดค่าที่อยู่และพอร์ตของกงสุลท้องถิ่น (ทั้งโหนดเซิร์ฟเวอร์และโหนดไคลเอนต์สามารถใช้) กงสุลคลาวด์สปริงจะเรียกอินเทอร์เฟซกงสุล HTTP REST เพื่อลงทะเบียนบริการspring.cloud.consul.discovery.true กำหนดค่าว่าจะลงทะเบียนบริการเมื่อเริ่มต้นspring.cloud.consul.discovery.hostname กำหนดค่าที่อยู่โฮสต์ของบริการสปริงบูตหรือสามารถกำหนดค่าได้โดยไม่ต้องกำหนดค่าและที่อยู่ท้องถิ่นเริ่มต้นคือ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 และลงทะเบียนโดยอัตโนมัติในคลัสเตอร์ Fabiospring.cloud.consul.discovery.instanceId กำหนดค่ารหัสบริการการลงทะเบียนกงสุลหลังจากงานด้านบนเสร็จสมบูรณ์เราต้องเริ่มกงสุลและฟาบิโอในพื้นที่
จากนั้นเราสามารถดีบักโครงการโดยตรงโดยใช้ Intellij Idea และกด Shift + F9 เพื่อแก้ไขข้อบกพร่อง
ข้อมูลข้างต้นดังกล่าวข้างต้นข้อมูลการพิมพ์ของแอคทูเอเตอร์:
2018-03-28 10: 09: 54.645 ข้อมูล 63482 --- [Main] Sbaewswebmvepcelpointhandlermapping: Mapped "{[/actuator/health เหมือนกัน java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvepnthandlermapping $ OperationHandler.handle (javax.servlet.http.httpservletrequest
2018-03-28 10: 09: 54.646 ข้อมูล 63482 --- [Main] Sbaewswebmvepcelpointhandlermapping: Mapped "{[/actuator/info เหมือนกัน java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvepnthandlermapping $ OperationHandler.handle (javax.servlet.http.httpservletrequest, Java.util.map
2018-03-28 10: 09: 54.647 Info 63482 --- [Main] SbaewswebmvenceDpointhandlermapping: Mapped "{[/Actuator เหมือนกัน 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.webmvenceDpointhandlermapping.links (javax.servlet.http.httpservletrequest, javax.servlet.http.httpservletresponse)
หรือเราสามารถใช้ Maven เพื่อจัดทำแพ็คเกจและเริ่มบริการด้วยคำสั่ง คุณสามารถใช้ maven ใน Ideallij Idea เพื่อจัดทำมันหรือใช้คำสั่ง maven เพื่อจัดทำมัน ที่นี่เราใช้คำสั่ง maven เพื่อจัดทำมัน
เมื่อเราติดตั้ง Idealij Idea, Maven ได้รับการติดตั้งโดยอัตโนมัติ แต่การกดปุ่ม mvn -v โดยตรงจะพบว่าไม่สามารถหาคำสั่งได้ดังนั้นเราจึงต้องกำหนดค่าตัวแปรสภาพแวดล้อม
ไดเรกทอรีไฟล์ maven ของฉันเองคือ /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 ซึ่งสามารถพบได้ในการตั้งค่าการกำหนดค่าของ Intellij Idea จากนั้นเราก็ดำเนินการคำสั่งต่อไปนี้:
$ export m2_home = "/applications/intellij idea.app/contents/plugins/maven/lib/maven3" && เส้นทางการส่งออก = $ path: $ m2_home/bin && chmod a+x "/applications
จากนั้นตรวจสอบว่าคำสั่ง maven มีผลหรือไม่:
$ MVN -VAPACHE MAVEN 3.3.9 (BB52D8502B132EC0A5A3F4C09453C07478323DC5; 2015-11-11T00: 41: 47+08: 00) MAVEN HOME:/Applications ผู้ขาย: Oracle Corporationjava Home: /library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault locale: zh_cn_#hans, การเข้ารหัสแพลตฟอร์ม: UTF-8OS ชื่อ: "Mac os x", เวอร์ชัน: "10.13.2", Arch: "" "
จากนั้นเราแก้ไข debug:false ใน application.yml และใช้ maven เพื่อจัดทำมัน (สลับไดเรกทอรีเป็นระดับ pom.xml ):
$ MVN Clean Package -dmaven.test.skip = true [ข้อมูล] การสแกนสำหรับโครงการ ... [ข้อมูล] [ข้อมูล] - - Spring-Cloud-Consul-Sample --- [ข้อมูล] การลบ/ผู้ใช้/xishuai/เอกสาร/ไฟล์โครงการ/โครงการทดสอบ/โครงการสปริง-คลาวด์-คอนซัล-ตัวอย่าง/เป้าหมาย [ข้อมูล] [ข้อมูล] --- maven-resources-plugin: 3.0.1: ทรัพยากร (แหล่งข้อมูลเริ่มต้น) ทรัพยากร [ข้อมูล] การคัดลอก 0 ทรัพยากร [ข้อมูล] [ข้อมูล] --- maven-compiler-plugin: 3.7.0: คอมไพล์ (คอมไพล์เริ่มต้น) @ Spring-Cloud-Consul-Sample --- [ข้อมูล] การเปลี่ยนแปลงที่ตรวจพบ-การรวบรวมโมดูล! Maven-Resources-Plugin: 3.0.1: TestResources (ค่าเริ่มต้น-แหล่งจ่ายค่าใช้จ่าย) @ Spring-Cloud-Consul-Sample --- [ข้อมูล] การคัดลอกทรัพยากรทดสอบ [ข้อมูล] [ข้อมูล] --- Maven-Compiler-Plugin: 3.7.0: TestCompile maven-surefire-plugin: 2.20.1: ทดสอบ (ทดสอบเริ่มต้น) @ Spring-Cloud-Conconsul-Sample --- [ข้อมูล] การทดสอบถูกข้ามไป [ข้อมูล] [ข้อมูล] --- maven-jar-plugin: 3.0.2: jar (default-jar) @ Spring-Cloud-consul โครงการ/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar [ข้อมูล] [ข้อมูล] --- Spring-Boot-Maven-Plugin: 2.0.0.Release: Repackage ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - -
แพ็คเกจ JAR ที่สร้างขึ้นจะอยู่ในไดเรกทอรีเป้าหมายด้วยไฟล์ spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (รูปแบบคือ项目名+ 版本号) จากนั้นเราสามารถเริ่มบริการได้โดยตรง:
$ java -jar เป้าหมาย/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar2018-03-28 10: 33: 31.750 ข้อมูล 63875 --- [หลัก] ScaannotationConfigapplicationContext [พุธ มี.ค. 28 10:33:31 CST 2018]; รากของลำดับชั้นบริบท: การดำเนินการเข้าถึงไตร่ตรองที่ผิดกฎหมายเกิดขึ้น: การเข้าถึงการไตร่ตรองอย่างผิดกฎหมายโดย org.springframework.cglib.core.reflectutils $ 1 (jar: ไฟล์:/ผู้ใช้/xishuai/เอกสาร/ไฟล์โครงการ/โครงการ โครงการ/Spring-Cloud-consul-Sample/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.springframework.cglib.core. การเข้าถึงการดำเนินการ: การดำเนินการทางเข้าที่ผิดกฎหมายทั้งหมดจะถูกปฏิเสธในอนาคต Release2018-03-28 10: 33: 31.971 ข้อมูล 63875 --- [หลัก] FaautowiredannotationBeanpostProcessor: JSR-330 'Javax.Inject 63875 --- [หลัก] trationdelegate $ beanpostprocessorchecker: ถั่ว 'การกำหนดค่า propertiesrebinderautoconfiguration' ประเภท [org.springframework.cloud.autoconfigure.configurationpropertiesrebinderautoconfiguration $ มีสิทธิ์ได้รับการประมวลผลโดย beanpostprocessors ทั้งหมด (ตัวอย่างเช่น: ไม่มีสิทธิ์ได้รับการพิสูจน์อัตโนมัติ) - - - - - - - - - - - - //// ======================================= ___/ =/ _/ _/ :: spring boot :: (v2.0.0.0.release)
ตรวจสอบว่าการตรวจสุขภาพสำเร็จหรือไม่:
ตรวจสอบว่าการลงทะเบียนบริการกงสุลประสบความสำเร็จหรือไม่:
ตรวจสอบว่าคลัสเตอร์ Fabio มีบริการหรือไม่:
หลังจากการลงทะเบียนบริการประสบความสำเร็จเราสามารถค้นพบบริการด้วยตนเองหรือค้นพบผ่านส่วนประกอบของสปริงคลาวด์ริบบิ้น/ฟิลเฟอร์และให้ฟังก์ชั่นโหลดบาลานซ์ (คล้ายกับฟังก์ชั่นฟาบิโอ) จากนั้นศึกษาในภายหลัง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น