ฉันได้สัมผัสกับ Microservices เมื่อเร็ว ๆ นี้และมีความเข้าใจในแง่มุมนี้ ฉันจะแบ่งปันกับคุณ
Spring Cloud เป็นชุดเฟรมเวิร์กที่สมบูรณ์สำหรับการใช้งานไมโครเซิร์ตโดยใช้สปริงบูต อาจกล่าวได้ว่า Spring Boot เป็นเฟรมเวิร์กและสปริงคลาวด์เนื่องจากไมโครเซิร์ตมารวมกันเป็นระบบเฟรมเวิร์กใหม่ที่ไม่สามารถเพิกเฉยได้ มันให้ส่วนประกอบที่จำเป็นสำหรับการพัฒนา microservice เช่นการจัดการการกำหนดค่าการค้นพบบริการเบรกเกอร์วงจรการกำหนดเส้นทางอัจฉริยะตัวแทนไมโครบัสควบคุมการล็อคทั่วโลกแคมเปญการตัดสินใจเซสชันแบบกระจายและการจัดการสถานะคลัสเตอร์ซึ่งสะดวกและใช้งานง่าย สปริงคลาวด์มีเฟรมย่อยจำนวนมากซึ่งสปริงคลาวด์ Netflix เป็นหนึ่งในเฟรมเวิร์กซึ่งส่วนใหญ่มีโมดูล: การค้นพบบริการเบรกเกอร์วงจรและการตรวจสอบการกำหนดเส้นทางอัจฉริยะ
ลักษณะ
(1) ยูเรก้าการลงทะเบียนบริการและการค้นพบให้บริการศูนย์ลงทะเบียนบริการไคลเอนต์การค้นพบบริการและอินเทอร์เฟซที่สะดวกเพื่อดูบริการที่ลงทะเบียนทั้งหมด บริการทั้งหมดใช้ไคลเอนต์ Discovery Service ของ Eureka เพื่อลงทะเบียนตัวเองไปยังเซิร์ฟเวอร์ของ Eureka
(2) Zuul, Gateway, ลูกค้าทุกคนขอให้เข้าถึงบริการแบ็กเอนด์ผ่านเกตเวย์นี้ มันสามารถใช้การกำหนดค่าการกำหนดเส้นทางบางอย่างเพื่อกำหนดว่าบริการใดที่จัดการ URL ที่แน่นอน และรับบริการที่ลงทะเบียนจากยูเรก้าเพื่อส่งต่อคำขอ
(3) ริบบิ้นนั่นคือโหลดบาลานซ์ เมื่อ Zuul Gateway ส่งคำขอไปยังแอปพลิเคชันของบริการบางอย่างหากบริการเริ่มต้นหลายอินสแตนซ์มันจะส่งไปยังอินสแตนซ์บริการบางอย่างผ่านริบบิ้นผ่านนโยบายการปรับสมดุลโหลด
(4) แสร้งทำเป็นไคลเอนต์บริการหากบริการจำเป็นต้องเข้าถึงซึ่งกันและกันคุณสามารถใช้ RestTemplate หรือไคลเอนต์ Feign เพื่อเข้าถึง มันใช้ริบบิ้นโดยค่าเริ่มต้นเพื่อให้ได้การปรับสมดุลโหลด
(5) Hystrix, การตรวจสอบและเบรกเกอร์ เราต้องเพิ่มแท็ก Hystrix ไปยังอินเทอร์เฟซบริการเพื่อรับรู้ฟังก์ชั่นการตรวจสอบและเบรกเกอร์ของอินเทอร์เฟซนี้
(6) แผงควบคุม Hystrix, แผงการตรวจสอบจัดเตรียมอินเทอร์เฟซที่สามารถตรวจสอบเวลาที่ใช้โดยการโทรบริการในแต่ละบริการ
(7) กังหันการตรวจสอบการรวมการตรวจสอบ Hystrix เราจำเป็นต้องเปิดข้อมูลการตรวจสอบของแต่ละอินสแตนซ์บริการเพื่อดู กังหันสามารถช่วยเรารวมข้อมูลการตรวจสอบของอินสแตนซ์บริการทั้งหมดลงในที่เดียวสำหรับการดูแบบครบวงจร
คุณสามารถอ้างถึงเอกสารในนั้น: https://springcloud.cc/spring-cloud-netflix.html
(1) ศูนย์การลงทะเบียนและตรวจสอบบริการ:
@springbootapplication@enableeurekaserver@enablehystrixdashboardpublic คลาสแอปพลิเคชัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ใหม่ springapplicationbuilder (application.class) .web (จริง) .run (args); -ที่นี่ @springbootapplication โดยใช้แท็กสปริงบูตแสดงให้เห็นว่าแอปพลิเคชันปัจจุบันเป็นแอปพลิเคชันสปริงบูต ด้วยวิธีนี้ฉันสามารถใช้ฟังก์ชั่นหลักโดยตรงเพื่อเริ่มแอปพลิเคชันใน IDE หรือฉันสามารถเริ่มต้นด้วยบรรทัดคำสั่งหลังจากบรรจุภัณฑ์ แน่นอนคุณสามารถเริ่มต้นแพ็คเกจสงครามแบบแพคเกจด้วยเซิร์ฟเวอร์เช่น Tomcat ใช้แท็ก @enableeurekaserver เพื่อเริ่มต้นส่วนประกอบของรีจิสทรีบริการยูเรก้าระหว่างการเริ่มต้น มันจะฟังพอร์ตซึ่งเป็น 8761 โดยค่าเริ่มต้นเพื่อรับการลงทะเบียนบริการ และให้หน้าเว็บ หลังจากเปิดมันคุณสามารถดูบริการที่ลงทะเบียนได้ การเพิ่ม @enablehystrixDashboard จะให้หน้าการตรวจสอบ เราสามารถป้อนที่อยู่ของบริการที่จะตรวจสอบเพื่อดูสถานะการโทรของอินเทอร์เฟซที่เปิดใช้งานการตรวจสอบ Hystrix แน่นอนว่าเพื่อใช้ส่วนประกอบข้างต้นเราจำเป็นต้องเพิ่มการพึ่งพาที่สอดคล้องกันในไฟล์ Maven Pom เช่นการใช้สปริง-สตาร์สตาร์สตาร์เทอร์-ผู้ปกครองโดยอาศัยสปริงคลาวด์สตาร์เทอร์-eureka-server
(2) การโทรระหว่างบริการ:
มีสองวิธีในการโทรบริการ RestTemplate และ FeignClient ไม่ว่าวิธีนี้จะเป็นอย่างไรมันจะเรียกอินเทอร์เฟซ HTTP ของบริการผ่านส่วนต่อประสาน REST และพารามิเตอร์และผลลัพธ์จะถูกทำให้เป็นอนุกรมและ deserialized โดยค่าเริ่มต้นผ่าน Jackson เนื่องจากอินเทอร์เฟซที่กำหนดโดย RestController ของ Spring MVC ข้อมูลที่ส่งคืนจะถูกส่งต่อไปยังข้อมูล JSON ผ่าน Jackson
ประเภทแรก: RestTemplate คุณจะต้องกำหนดถั่ว resttemplate และตั้งค่าเป็น loadbalanced:
@ConfigurationPublic คลาส SomeCloudConfiguration {@LoadBalanced @Bean RESTTEMPLATE RESTTEMPLATE () {ส่งคืน RESTTEMPLATE ใหม่ (); -ด้วยวิธีนี้เราสามารถฉีดถั่วนี้ที่เราต้องการ:
ชั้นเรียนสาธารณะ สตริงสาธารณะ GetUserById (Long UserID) {userDto results = restTemplate.getForObject ("http: // ผู้ใช้/getUserDetail/" + userId, userdto.class); ผลลัพธ์กลับมา; -ที่ซึ่งผู้ใช้คือรหัสบริการริบบิ้นจะได้รับอินสแตนซ์ของบริการนี้จากรายการอินสแตนซ์บริการส่งคำขอและรับผลลัพธ์ Object UserDTO ต้องการหมายเลขซีเรียลและหมายเลขต่อต้านซีรีย์จะเสร็จสมบูรณ์โดยอัตโนมัติ
ประเภทที่สอง: feignclient
@FeIgnClient (value = "ผู้ใช้", path = "/ผู้ใช้") อินเตอร์เฟสสาธารณะ userCompositeservice {@requestmapping (value = "/getUserDetail/{id}", method = requestMethod.get, ผลิต = mediaType.application_json_value)เราต้องกำหนดข้อแก้ตัวโดยใช้ @feignclient เท่านั้น Spring Cloud Feign จะช่วยให้เราสร้างการใช้งานและรับข้อมูลจากบริการผู้ใช้ที่เกี่ยวข้อง ในหมู่พวกเขาค่าใน @feignClient (value = "ผู้ใช้", path = "/ผู้ใช้/getUserDetail") เป็นรหัสบริการและพา ธ เป็นคำนำหน้าพา ธ ของอินเทอร์เฟซกลุ่มนี้ ในนิยามวิธีการต่อไปนี้เช่นการตั้งค่าอินเตอร์เฟสสปริง MVC สำหรับวิธีนี้ URL ที่สอดคล้องกันคือ/ผู้ใช้/getUserDetail/{id} จากนั้นเมื่อใช้งานเช่นเดียวกับการฉีดบริการทั่วไปแล้วใช้มัน:
ชั้นเรียนสาธารณะ somothererviceclass {@autowired ส่วนตัว usercompositeservice ผู้ใช้บริการ; โมฆะสาธารณะ Dosomething () {// ...... userdto results = userservice.getUserById (userId); // การดำเนินการอื่น ๆ ... }}(3) เบรกเกอร์:
// วงจรเบรกเกอร์: เพื่อแก้ปัญหาที่เรียกใช้วิธีทางเลือกเพื่อแทนที่วิธีที่ล้มเหลวเมื่อการเรียกใช้วิธีล้มเหลวฟังก์ชั่นของการทนต่อข้อผิดพลาด/การปิดกั้นข้อผิดพลาดของน้ำตก // fallbackMethod ระบุวิธีการโทรกลับ @HyStrixCommand (fallbackMethod = "dostudentFallback") @requestmapping (value = "dostudent", method = requestmethod.get) สตริงสาธารณะ dostudent () {return "ชื่อของคุณ: ความลับของคุณในหมู่พวกเขาใช้ @enablecircuitbreaker เพื่อเปิดใช้งานการรองรับเบรกเกอร์ Spring Cloud จัดเตรียมคอนโซลเพื่อตรวจสอบการทำงานของเบรกเกอร์ซึ่งเปิดใช้งานผ่านคำอธิบายประกอบ @enablehystrixDashboard
ข้างต้นเป็นการแนะนำสั้น ๆ เกี่ยวกับส่วนประกอบของสปริงคลาวด์ Netflix ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น