การเปิด
ตัวอย่างนี้ขึ้นอยู่กับฐานข้อมูลหน่วยความจำ H2 ของ Springboot การรวมการทดสอบหน่วยและฐานข้อมูลที่ไม่ขึ้นกับฐานข้อมูลและการใช้ RestTemplate เพื่อใช้บริการ RESTFOR ของ Spring Boot
ในตัวอย่างบริการ RESTFUL ที่ใช้ RESTTEMPLATE เพื่อใช้สปริงบูตเรากล่าวว่าเมื่อเรียกใช้บริการสปริงบูต URL บริการจะต้องเขียนลงในไฟล์การกำหนดค่า แต่ไม่ว่าสองวิธีใดเมื่อที่อยู่ IP เปลี่ยน ปัญหานี้สามารถหลีกเลี่ยงได้อย่างมีประสิทธิภาพเมื่อใช้ริบบิ้น
คำนำ:
มีสองวิธีในการใช้งาน Soft Load Balancing คือโหลดบาลานซ์บนเซิร์ฟเวอร์และโหลดบาลานซ์บนไคลเอนต์
การปรับสมดุลโหลดฝั่งเซิร์ฟเวอร์: เมื่อเบราว์เซอร์ออกคำขอไปยังพื้นหลังมันจะส่งคำขอไปยังเซิร์ฟเวอร์พร็อกซีย้อนกลับก่อน เซิร์ฟเวอร์พร็อกซีย้อนกลับจะตัดสินใจว่าเซิร์ฟเวอร์ใดที่จะส่งคำขอไปยังตารางการแมป IP: พอร์ตและนโยบายการปรับสมดุลโหลดที่ลูกค้าปรับใช้ โดยทั่วไปใช้เทคโนโลยีพร็อกซีย้อนกลับของ Nginx
การโหลดบาลานซ์ของไคลเอนต์: เมื่อเบราว์เซอร์ส่งคำขอไปยังพื้นหลังไคลเอนต์จะดึงข้อมูลบริการที่มีอยู่ที่ลงทะเบียนไปยังเซิร์ฟเวอร์ไปยังผู้ลงทะเบียนบริการ (ตัวอย่างเช่น: Eureka Server) จากนั้นกดเซิร์ฟเวอร์ใดที่ส่งคำขอตามนโยบายการโหลดบาลานซ์ กระบวนการทั้งหมดนี้ทำในฝั่งไคลเอ็นต์และไม่จำเป็นต้องมีส่วนร่วมของพร็อกซีเซิร์ฟเวอร์ย้อนกลับ
1. เริ่มเซิร์ฟเวอร์ยูเรก้า
โปรดดูตัวอย่างนี้: เริ่มเซิร์ฟเวอร์ยูเรก้าในสปริงคลาวด์
2. เริ่ม Microservice และลงทะเบียนด้วยเซิร์ฟเวอร์ยูเรก้า
สปริงคลาว
เพื่อแสดงให้เห็นถึงผลกระทบของการปรับสมดุลโหลดให้เริ่มบริการอื่นโปรดทราบว่าหมายเลขพอร์ตจะต้องเปลี่ยนเป็นไม่สอดคล้องกัน
3. เพิ่มการรองรับ Ribbon
1. เพิ่มการพึ่งพาของริบบิ้น
2. เพิ่มการรองรับโหลดบาลานซ์
แพ็คเกจ com.chhliu.springboot.restful; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.boot.springapplication; นำเข้า org.springframework.boot.autoconfigure.springbootapplication; นำเข้า org.springframework.boot.web.client.resttemplatebuilder; นำเข้า org.springframework.cloud.client.loadbalancer.loadbalanced; นำเข้า org.springframework.cloud.netflix.eureka.enableeurekaclient; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.web.client.resttemplate; @springbootapplication @enableeurekaclient คลาสสาธารณะ SpringbootrestTemplateApplication {@autowired Private RestTemplateBuilder Builder; @Bean @LoadBalanced // การเพิ่มการสนับสนุนโหลดบาลานซ์นั้นง่ายมาก คุณจะต้องเพิ่มคำอธิบายประกอบ @LoadBalanced ลงใน RestTemplate จากนั้น RestTemplate จะมีฟังก์ชั่นของการปรับสมดุลโหลด หากไม่ได้เพิ่มคำอธิบายประกอบ @loadbalanced จะมีการรายงาน java.net.unknownhostexception: จะมีการรายงานข้อยกเว้น Springboot-H2 ในเวลานี้บริการไม่สามารถเรียกได้โดยการลงทะเบียนชื่อบริการบนเซิร์ฟเวอร์ยูเรก้าเนื่องจาก RestTemplate ไม่สามารถแมปจากชื่อบริการไปยัง IP: พอร์ตและฟังก์ชั่นการแมปถูกนำมาใช้โดย loadbalancerclient RestTemplate สาธารณะ RestTemplate () {return builder.build (); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (springbootresttemplateapplication.class, args); - 3. แก้ไข URL ของ Microservice ที่เรียก
แพ็คเกจ com.chhliu.springboot.restful.controller; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.web.bind.annotation.getMapping; นำเข้า org.springframework.web.bind.annotation.pathvariable; นำเข้า org.springframework.web.bind.annotation.restcontroller; นำเข้า org.springframework.web.client.resttemplate; นำเข้า com.chhliu.springboot.restful.vo.user; @RestController คลาสสาธารณะ RESTTEMPLATECONTROLLER {@AUTOWIRED RESTTEMPLATE RESTTEMPLATE; @getMapping ("/template/{id}") ผู้ใช้สาธารณะ findById (@PathVariable Long ID) {// เปลี่ยนรูปแบบ IP ดั้งเดิม: พอร์ตเป็นชื่อแอปพลิเคชันที่ลงทะเบียนบนผู้ใช้เซิร์ฟเวอร์ Eureka u = this.resttemplate.getForObject ("http: // springboot-h2/user/" + id ผู้ใช้ System.out.println (u); กลับคุณ; -4. ตรวจสอบสถานะของเซิร์ฟเวอร์ยูเรก้า
5. ในเบราว์เซอร์รีเฟรช http: // localhost: 7904/เทมเพลต/2 ที่อยู่หลายครั้ง
6. ผลการทดสอบ
7900 พอร์ตบริการ:
Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.balance เป็น balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ผู้ใช้
7901 พอร์ตบริการ:
Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.balance เป็น balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้ผู้ใช้ Hibernate: เลือก user0_.id เป็น id1_0_0_, user0_.age เป็น Age2_0_0_, user0_.balance เป็น Balance3_0_0_, user0_.name เป็น name4_0_0_, user0_.username เป็นชื่อผู้ใช้ 5_0_0_ จากผู้ใช้
7904 พอร์ตบริการ:
ผู้ใช้ [id = 2, ชื่อผู้ใช้ = user2, ชื่อ = li si, อายุ = 20, สมดุล = 100.00] 2017-01-23 09: 58: 05.682 ข้อมูล 7436 --- [erlistupdater-0] niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 ผู้ใช้ [ID = 2, ชื่อผู้ใช้ = ผู้ใช้ 2, ชื่อ = li Si, อายุ = 20, สมดุล = 100.00] ผู้ใช้ [ID = 2, ชื่อผู้ใช้ อายุ = 20, สมดุล = 100.00] ผู้ใช้ [ID = 2, ชื่อผู้ใช้ = user2, ชื่อ = li si, อายุ = 20, สมดุล = 100.00] ผู้ใช้ [id = 2, ชื่อผู้ใช้ = user2, ชื่อ = li si, อายุ = 20, สมดุล = 100.00] ผู้ใช้ [ID = 2, ชื่อผู้ใช้ อายุ = 20, สมดุล = 100.00] ผู้ใช้ [ID = 2, ชื่อผู้ใช้ = user2, ชื่อ = li si, อายุ = 20, สมดุล = 100.00]
จากผลการทดสอบข้างต้นเราจะเห็นว่ามีการปรับบริการพอร์ตทั้งหมด 7904 ครั้ง 9 ครั้งซึ่งมีการปรับบริการพอร์ต 7904 ครั้ง 4 ครั้งและปรับพอร์ต 7901 พอร์ต 5 ครั้งซึ่งเป็น 9 ครั้ง
หลังจากขั้นตอนข้างต้นริบบิ้นจะถูกใช้เพื่อรับรู้ฟังก์ชั่นการปรับสมดุลโหลดไคลเอ็นต์
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น