เวลานี้เรากำลังแบ่งปันเนื้อหาเกี่ยวกับการลงทะเบียนและการค้นพบบริการ SpringCloud ซึ่งจะอธิบายโดยศูนย์บริการอาคารการลงทะเบียนบริการและการค้นพบบริการตามลำดับ ตอนนี้ บริษัท สตาร์ทอัพหลายแห่งในปักกิ่งได้เริ่มพึ่งพา SpringCloud อาจเป็นเพราะเอกสารและส่วนประกอบที่หลากหลาย ท้ายที่สุดมันเป็นสถาปัตยกรรม microservice ที่ค่อนข้างสมบูรณ์ในปัจจุบัน ฉันหวังว่าการแบ่งปันนี้จะช่วยให้ทุกคนได้รับความช่วยเหลือที่ดี
ศูนย์บริการยูเรก้า
เท่าที่ฉันรู้และใช้ศูนย์การลงทะเบียนจำนวนมากรวมถึง Zookeeper และ Eureka บทความก่อนหน้าของฉันแบ่งปัน Dubbo+Zookeeper เพื่อสร้างบริการดังนั้นเวลานี้ฉันใช้ยูเรก้า Framework SpringCloud ยังแนะนำให้เป็นศูนย์ลงทะเบียน แน่นอนว่ามันสามารถรวมเข้ากับศูนย์ลงทะเบียนบริการอื่น ๆ ท้ายที่สุด SpringCloud อาศัย Springboot เพื่อสร้างโครงการดังนั้นจึงเป็นเรื่องที่รวดเร็วในการรวมส่วนประกอบอื่น ๆ ขั้นแรกให้สร้างโครงการลงทะเบียนศูนย์ Eureka_Server และแนะนำการอ้างอิงผ่านสิ่งต่อไปนี้:
<Effercing> <roupID> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-Starter-Eureka-Server </artifactId>
จากนั้นเพิ่มรายการการกำหนดค่าลงในไฟล์ application.yml:
เซิร์ฟเวอร์: พอร์ต: 2001Spring: แอปพลิเคชัน: ชื่อ: Eureka-serveureureka: ไคลเอนต์: register-with-eureka: false #forbid ตัวเองเพื่อลงทะเบียนเป็นบริการการดึงข้อมูล-การลงทะเบียน #MASK ข้อมูลการลงทะเบียน: {priest-ip-address: True Instance-ID: $ {Spring.Application.Nameหลังจากการกำหนดค่าเสร็จสมบูรณ์คุณต้องเริ่มคลาสและเพิ่มคำอธิบายประกอบ @enableeurekaserver การตั้งค่าจะเสร็จสมบูรณ์และทำงานโดยทั่วไป เยี่ยมชม http: // localhost: 2001/ เพื่อรับอินเทอร์เฟซต่อไปนี้:
บริการลงทะเบียนผู้ให้บริการ
ด้วยศูนย์ลงทะเบียนบริการเรายังต้องให้บริการและลงทะเบียนบริการเหล่านี้กับศูนย์บริการ เพื่ออำนวยความสะดวกในสิ่งนี้ก่อนอื่นเราจะสร้างโมดูลอินเทอร์เฟซโครงการ EUREKA_API ที่ใช้โดยผู้ให้บริการและผู้บริโภคและสร้างอินเทอร์เฟซต่อไปนี้และขอส่งคืนพารามิเตอร์เอนทิตี
อินเทอร์เฟซสาธารณะ UserInterface {@postmapping ("/ผู้ใช้") Morp <list <mouser>> getusers (Morq RQ); @getMapping ("/msg") สตริง getMSG ();}Entity Mouser:
Mouser ชั้นเรียนสาธารณะ {ID ยาวส่วนตัว; ชื่อผู้ใช้สตริงส่วนตัว; สตริงส่วนตัว userpwd; Public Long getId () {return id; } โมฆะสาธารณะ setId (Long id) {this.id = id; } สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getUserPwd () {return userpwd; } โมฆะสาธารณะ setUserPwd (สตริง userpwd) {this.userpwd = userpwd; -จากนั้นสร้างโมดูล Eureka_Provider ทางด้านผู้ให้บริการของเราและยังแนะนำการพึ่งพา Eureka แต่มีความแตกต่างเล็กน้อยระหว่างมันกับฝั่งเซิร์ฟเวอร์:
<การพึ่งพา> <roupId> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-Starter-Eureka </artifactid> </serdency>
จากนั้นสร้างบริการ USERCONTROLLER ที่จะได้รับจากผู้ให้บริการและใช้อินเทอร์เฟซ UserInterface ในโมดูล EUREKA_API ของเรา รหัสมีดังนี้:
@RestControllerPublic คลาส UserController ใช้ UserInterface {@AutoWired ส่วนตัว httpservletRequest คำขอ; @Override Public Morp <list <Mouser>> GetUsers (Morq RQ) {Morp <list <Mouser>> rp = ใหม่ morp <> (); รายการ <mouser> list = new ArrayList <> (); สำหรับ (int i = 0; i <5; i ++) {Mouser Mouser = new Mouser (); mouser.setid (i); mouser.setusername ("Shenniu" + i); list.add (Mouser); } rp.sett (รายการ); rp.setstatus (list.size ()> = 1? 1: 0); rp.setMessage (list.size ()> = 1? "": "ยังไม่มีข้อมูล"); คืน RP; } @Override สตริงสาธารณะ getMSG () {return "นี่คือผู้ให้บริการพอร์ต:"+ request.getServerport (); -ควรสังเกตที่นี่ว่าไม่มีการเพิ่ม postmapping หรือ getMapping ในอินเทอร์เฟซบริการทั้งสองของคอนโทรลเลอร์เนื่องจากสิ่งนี้ถูกประกาศโดยอินเทอร์เฟซที่นำไปใช้ หลังจากกำหนดบริการผู้ใช้และผงชูรสเราต้องสามารถฉีดเข้าไปในศูนย์ลงทะเบียนบริการได้ดังนั้นจึงจำเป็นต้องมีการกำหนดค่า Application.yml ต่อไปนี้:
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: Eureka-Provider #Service ชื่อ EUREKA: ไคลเอนต์: Service-URL: DefaultZone: http: // localhost: 2001/Eureka/#Service Center ที่อยู่อินสแตนซ์ FEURTER-IP-ADDREST
นอกจากนี้เรายังต้องเพิ่มแท็กต่อไปนี้ @enableeurekaclient ในคลาสเริ่มต้นซึ่งหมายถึงการเริ่มต้นไคลเอนต์ยูเรก้าเนื่องจากผู้ให้บริการเป็นของลูกค้าเมื่อเทียบกับศูนย์บริการ เมื่อเรียกใช้โครงการ Eureka_Provider เราสามารถดูข้อมูลต่อไปนี้ในศูนย์ทะเบียน:
เพื่อให้แน่ใจว่าอินเทอร์เฟซผู้ให้บริการนั้นใช้ได้เราสามารถคลิก Eureka-Provider โดยตรง: 2004 จากนั้นเพิ่มเส้นทางไปยังอินเทอร์เฟซที่จะใช้ นี่คือ: http://192.168.153.148:2004/msg และเราสามารถรับข้อมูลต่อไปนี้ที่ส่งคืนโดยอินเตอร์เฟสการเข้าถึงปกติ:
บริการ Discovery Consumer Discovery
ด้วยบริการอินเทอร์เฟซเราจำเป็นต้องใช้บริการดังนั้นเราจึงสร้างโครงการโมดูลยูเรก้า _consumer เนื่องจากวิธีการหลอกเทียมของเฟนใช้ในการเข้าถึงผู้ให้บริการของเราและเราต้องแนะนำการพึ่งพาของยูเรก้าด้วย
<การพึ่งพา> <roupId> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-Starter-eureka </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.springframework.cloud </groupid>
จากนั้นกำหนดบริการผู้ใช้บริการที่เลเยอร์บริการและใช้อินเทอร์เฟซในโมดูลส่วนต่อประสานสาธารณะ Eureka_api รหัสมีดังนี้:
@feignClient (value = "Eureka-Provider") ผู้ใช้อินเตอร์เฟสสาธารณะขยายผู้ใช้ EserInterface {}ผ่าน FeignClient ระบุชื่อแอปพลิเคชันเซิร์ฟเวอร์ที่เรียกว่า Eureka-Provider ชื่อนี้สอดคล้องกับไดเรกทอรีแอปพลิเคชันที่ลงทะเบียนในศูนย์บริการ สร้าง userController การตอบกลับที่เลเยอร์คอนโทรลเลอร์และให้สองอินเตอร์เฟสที่แสดงรหัสเช่น:
@RestControllerPublic คลาส USERCONTROLLER {@AutoWired Userservice Userservice; @getMapping ("/ผู้ใช้") Public Morp <list <Mouser>> GetUsers (Morq RQ) {return UserserVice.getUsers (RQ); } @getMapping ("/msg") สตริงสาธารณะ getMsg () {return userservice.getmsg (); -ในทำนองเดียวกันด้านผู้บริโภคยังจำเป็นต้องกำหนดค่าข้อมูลบางอย่างใน Application.yml:
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: Eureka-Consumereureka: ไคลเอนต์: Service-URL: DefaultZone: http: // localhost: 2001/Eureka/#Register Center Instance: {priest-ip-address: True Instance-Id: $ {Spring.Application.Name}: $ {เซิร์ฟเวอร์การกำหนดค่าคล้ายกับของผู้ให้บริการ ในที่สุดคุณต้องประกาศคำอธิบายประกอบต่อไปนี้ในคลาสเริ่มต้น:
@springbootapplication@enablediscoveryclient // ลูกค้าผู้บริโภค@enablefeignclients // feign ไคลเอนต์คลาสสาธารณะระดับยูเรกอนซูมูเมอร์ {โมฆะคงที่สาธารณะ (สตริง [] args) {springapplication.run (eeurekaconsumerapplication.class -หลังจากเริ่มโครงการ Eureka_Consumer เราสามารถดูข้อมูลที่ลงทะเบียนในศูนย์ทะเบียน:
จากนั้นโดยการเข้าถึงอินเทอร์เฟซผู้บริโภค Eureka_Consumer ให้ทดสอบข้อมูลอินเตอร์เฟสของผู้ให้บริการ Eureka_Provider เพื่อดูว่าสามารถตอบสนองได้ตามปกติหรือไม่ ที่อยู่อินเตอร์เฟสคือ http: // 192.168.153.148:2005/msg:
ผลลัพธ์ของผู้ให้บริการได้มาจากการเข้าถึงผู้บริโภคซึ่งเป็นกระบวนการทดสอบพื้นฐานสำหรับการลงทะเบียนและการค้นพบบริการ สำหรับวิธีการที่ผู้บริโภคร้องขออินเทอร์เฟซผู้ให้บริการเราสามารถแก้ไขได้ผ่านแผนภาพด้วยตนเองต่อไปนี้:
ศูนย์บริการยูเรก้ามีให้บริการสูง
เมื่อพิจารณาจากการวาดด้วยตนเองข้างต้นศูนย์บริการมีบทบาทสำคัญมาก โดยปกติแล้วศูนย์บริการประเภทนี้ไม่เพียง แต่สร้างขึ้นดังนั้นจึงจำเป็นต้องสร้างศูนย์บริการที่มีอยู่อย่างสูง ในความเป็นจริงมันง่ายมากที่การกำหนดค่าของผู้ให้บริการและผู้บริโภคไม่จำเป็นต้องทำ เราจำเป็นต้องกำหนดค่าไว้ใน Application.yml ของโครงการ Eureka-Server บนโหนดแรกและเริ่มบริการหลายรายการด้วยพอร์ตที่แตกต่างกัน (เซิร์ฟเวอร์เดียวกันมีหลายพอร์ตและพอร์ตเซิร์ฟเวอร์ที่แตกต่างกันอาจเหมือนกัน):
เซิร์ฟเวอร์: พอร์ต: 2001Spring: แอปพลิเคชัน: ชื่อ: Eureka-Serveureureka: ไคลเอนต์: register-with-eureka: true # เมื่อกำหนดค่าความพร้อมใช้งานสูงคุณต้องเปิดและลงทะเบียนตัวคุณเอง fetch-registry: true service-url: defaultzone: http: // localhost: 2002/eureka http: // localhost: 2001/eureka/อินสแตนซ์: right-ip-address: true instance-id: $ {spring.application.name}: $ {server.port} เซิร์ฟเวอร์: Eviction-interval-timer-in-ms: 2000 #ExCludeประเด็นต่อไปนี้ควรได้รับความสนใจในการกำหนดค่าที่มีอยู่อย่างสูง:
ที่นี่ฉันสร้างที่อยู่รีจิสตรีสองที่: http: // localhost: 2001/และ http: // localhost: 2002/; เนื่องจากที่อยู่รีจิสทรีที่กำหนดค่าโดยผู้ให้บริการและผู้บริโภคเป็นทั้งพอร์ต 2544 เพื่อตรวจสอบความพร้อมใช้งานสูงเราจำเป็นต้องเข้าถึงศูนย์ลงทะเบียนพอร์ตปี 2002 เอฟเฟกต์มีดังนี้:
คุณจะเห็นว่าพอร์ตปี 2002 มีข้อมูลการลงทะเบียนเช่นเดียวกับพอร์ตปี 2001 เมื่อฉันปิดแอปพลิเคชันของพอร์ตปี 2544 ฉันยังสามารถค้นหาข้อมูลของผู้ให้บริการและผู้บริโภคในปี 2545 สำหรับการกำหนดค่าโดยละเอียดเพิ่มเติมโปรดดูคำอธิบายเว็บไซต์อย่างเป็นทางการ
ที่อยู่ Git: https://github.com/shenniubuxing3
แพ็คเกจ Nuget Release: https://www.nuget.org/profiles/shenniubuxing3
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น