รู้เบื้องต้นเกี่ยวกับริบบิ้น
ในระบบแบบกระจายแต่ละ microservice จะปรับใช้หลายอินสแตนซ์ วิธีการแจกจ่ายผู้บริโภคบริการให้กับผู้ให้บริการหลายรายอย่างเท่าเทียมกันต้องใช้การใช้งานโหลดบัลแลนเซอร์
Ribbon เป็นตัวโหลดบาลานซ์ซึ่งให้อัลกอริธึมการโหลดบาลานซ์จำนวนมากเช่นการสำรวจและจากนั้นหลังจากกำหนดค่าที่อยู่ผู้ให้บริการคำขอผู้บริโภคบริการสามารถแจกจ่ายได้อย่างสม่ำเสมอ
บูรณาการริบบิ้นเพื่อให้บริการผู้บริโภค
เพิ่มไลบรารีการพึ่งพาริบบิ้น
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Ribbobn </artifactId>
เพิ่มคำอธิบายประกอบ @loadbalaced ลงใน RestTemplate เพื่อรวม RestTemplate และ Ribbon
@bean@loadbalancedpublic resttemplate resttemplate () {return new resttemplate ();}แก้ไขคอนโทรลเลอร์และแก้ไขที่อยู่คำขอเป็น http: // flim-user/user/ เมื่อใช้ริบบิ้นและยูเรก้าร่วมกันชื่อโฮสต์เสมือนจะถูกแมปโดยอัตโนมัติไปยังที่อยู่เครือข่ายของ microservice และ loadbalancerclient จะถูกฉีดเพื่อส่งออกโหนด microservice ที่เลือกในปัจจุบัน
@RestControllerPublic คลาส MovieController {logger สุดท้าย logger สุดท้าย = loggerFactory.getLogger (MovieController.class); @AutoWired RestTemplate RestTemplate; @autowired Loadbalancerclient Loadbalancerclient; @getMapping ("/user/{id}") ผู้ใช้สาธารณะ findById (@PathVariable int id) {return this.resttemplate.getForObject ("http: // flim-user/"+id, user.class); } @getMapping ("/log-instance") โมฆะสาธารณะ loginstance () {ServiceInstance ServiceInstance = this.loadbalancerclient.choose ("Flim-user"); log.info ("{}: {}: {}", ServiceInstance.getServiceId (), ServiceInstance.getHost (), ServiceInstance.getport ()); -เรียกใช้โปรแกรมทดสอบ
{"id": 1, "ชื่อผู้ใช้": "บัญชี 1", "ชื่อ": "จางซาน", "อายุ": 20, "ยอดคงเหลือ": 100.00}
ข้อมูลต่อไปนี้จะถูกส่งออกเมื่อเข้าถึง http: // localhost: 8010/log-instance หลายครั้ง
คุณจะเห็นว่าคำขอจะถูกแจกจ่ายอย่างสม่ำเสมอไปยัง Microservices ผู้ใช้สองคน
2017-12-17 20: 47: 53.975 ข้อมูล 12313 --- [NIO-8010-Exec-2] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8764
2017-12-17 20: 47: 54.215 ข้อมูล 12313 --- [NIO-8010-Exec-1] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8763
2017-12-17 20: 47: 54.445 ข้อมูล 12313 --- [NIO-8010-Exec-3] com.linyuan.Controller.moviecontroller: Flim-user: Linyuandembp: 8764
2017-12-17 20: 47: 54.690 ข้อมูล 12313 --- [NIO-8010-Exec-4] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8763
2017-12-17 20: 47: 54.935 ข้อมูล 12313 --- [NIO-8010-Exec-5] com.linyuan.Controller.moviecontroller: Flim-user: Linyuandembp: 8764
หมายเหตุ: RestTemplate.getForObject (... ) และ loadbalancerclient.choose (... ) ไม่สามารถเขียนในวิธีเดียวกันได้เนื่องจาก REST-template เป็นไคลเอนต์ริบบิ้นและตัวเองมีพฤติกรรม "เลือก" อยู่แล้ว
การกำหนดค่าริบบิ้นตามรหัส
คุณสามารถใช้รหัส Java หรือแอตทริบิวต์เพื่อปรับแต่งการกำหนดค่าริบบิ้น คลาสการกำหนดค่าเริ่มต้นของริบบิ้นคือ RibbonClientConfiguration หรือคุณสามารถใช้ POJO เพื่อปรับแต่งการกำหนดค่าริบบิ้น การกำหนดค่านี้มีความละเอียด ไคลเอนต์ริบบิ้นที่แตกต่างกันสามารถใช้การกำหนดค่าที่แตกต่างกัน
สร้างคลาสการกำหนดค่าริบบิ้น
/*** คลาสนี้เป็นคลาสการกำหนดค่า* ไม่ควรสแกนโดย ComponentScan*/ @configurationPublic คลาส ribbonconfiguration {@bean สาธารณะ irule riule ribbonrule () {// กฎการปรับสมดุลการตั้งค่าการเปลี่ยนแปลงการสุ่มส่งคืนแบบสุ่มใหม่ (); -ระบุคลาสการกำหนดค่าสำหรับผู้ให้บริการโดยใช้คำอธิบายประกอบ @ribbonclient หรือ @ribbonclients
@springbootapplication @enablediscoveryclient @ribbonclient (name = "flim-user", การกำหนดค่า = ribbonconfiguration.class) คลาสสาธารณะคลาส flimconsumerapplication {@bean @loadbalanced สาธารณะ resttemplate () {ส่งคืนใหม่ใหม่ (); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (flimconsumerapplication.class, args); -เยี่ยมชมที่อยู่การทดสอบ http: // localhost: 8010/log-instance และคุณจะเห็นว่าคำขอจะถูกแจกจ่ายแบบสุ่มไปยังไมโครเซิร์ตสองตัว
2017-12-17 21: 08: 52.769 ข้อมูล 12524 --- [NIO-8010-Exec-7] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8763
2017-12-17 21: 08: 52.946 ข้อมูล 12524 --- [NIO-8010-Exec-8] com.linyuan.Controller.moviecontroller: Flim-user: Linyuandembp: 8763
2017-12-17 21: 08: 53.138 ข้อมูล 12524 --- [NIO-8010-Exec-9] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8763
2017-12-17 21: 08: 53.319 ข้อมูล 12524 --- [IO-8010-Exec-10] com.linyuan.controller.moviecontroller: Flim-user: Linyuandembp: 8764
2017-12-17 21: 08: 53.511 ข้อมูล 12524 --- [NIO-8010-Exec-1] com.linyuan.Controller.MovieController: Flim-user: Linyuandembp: 8763
หมายเหตุ: คลาส RibbonConfiguration ไม่สามารถสแกนได้โดย @componentscan มิฉะนั้นข้อมูลการกำหนดค่าจะถูกแชร์โดย @ribbonclient ทั้งหมด ดังนั้นหากคุณต้องการปรับแต่งการกำหนดค่าของไคลเอนต์ริบบิ้นบางตัวคุณจะต้องป้องกันไม่ให้สแกนโดย @componentscan
กำหนดค่าริบบิ้นในไฟล์กำหนดค่า
การปรับแต่งคุณสมบัติของริบบิ้นผ่านไฟล์การกำหนดค่านั้นสะดวกกว่าและคำนำหน้าการกำหนดค่าคือ <clientName> .ribbon
กำหนดการกำหนดค่าริบบิ้นผ่านไฟล์การกำหนดค่า
Flim-user: Ribbon: nfloadbalancerruclassName: com.netflix.loadbalancer.randomrule
การกำหนดค่าริบบิ้นที่ใช้กันทั่วไป
Ribbon: ConnectionTimeout: #Connection TimeOut ReadTimeOut: #Read TimeOut OkToretryOnallOperAtotions: #Retry การดำเนินการทั้งหมดคำขอ MAXAUTORETRIESNEXTSERVER: #Switch Server อินสแตนซ์ลอง MaxAutoretries: #Retry
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น