ในระบบแบบกระจายไฟล์การกำหนดค่าจะกระจัดกระจายในแต่ละโครงการทำให้ยากต่อการจัดการจากส่วนกลางหรือหากการกำหนดค่าได้รับการแก้ไขจะต้องมีการรีสตาร์ทก่อนที่จะมีผล ต่อไปเราใช้ Spring Cloud Config เพื่อแก้ปัญหาความเจ็บปวดนี้
เซิร์ฟเวอร์กำหนดค่า
เราใช้ config-server เป็นเซิร์ฟเวอร์ config และจำเป็นต้องเพิ่มการพึ่งพาเท่านั้น:
<การพึ่งพา> <roupId> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-config-Server </artifactid>
ใน application.yml กำหนดค่า:
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: config-server # ชื่อคลาวด์: config: เซิร์ฟเวอร์: git: uri: ไฟล์: // ผู้ใช้/yangdd/เอกสาร/รหัส/github/config-repo # ใช้ที่เก็บในท้องถิ่น (สำหรับการทดสอบ), รูปแบบ: // $ {user.home}/config-repo https://github.com/yangdd1205/spring-cloud-master/ #username: ชื่อผู้ใช้ #รหัสผ่าน: รหัสผ่าน #default-label: config #สามารถส่ง ID ชื่อสาขาชื่อแท็กค่าเริ่มต้นคือ Master #Search-Paths: #ในคำอื่น ๆโครงการฤดูใบไม้ผลิโดยทั่วไปมีหลักการของ "การประชุมมากกว่าการกำหนดค่า" ดังนั้นไฟล์การกำหนดค่าใน Git ของเราโดยทั่วไปจะตั้งชื่อหลังจาก {application}-{profile} .yml หรือ {application}-{profile} .properties
เรามีสองไฟล์ client-dev.yml ในสาขาหลักของ config-repo:
ข้อมูล: Master-Dev
client-prod.yml:
ข้อมูล: Master-Prod
ในสาขาการกำหนดค่ามีไฟล์ client-dev.yml สองไฟล์:
ข้อมูล: config-dev
client-prod.yml:
ข้อมูล: config-prod
เริ่มการกำหนดค่าเซิร์ฟเวอร์เราสามารถเข้าถึงไฟล์การกำหนดค่าใน GIT ผ่านความสัมพันธ์การแมปต่อไปนี้:
/{APPLICATION/ESPROFILE} [{label} เหมือนกัน/{APPLICATION-{profile}.yml/ {label}/ {Application}- {profile}.yml/ {Application} -profile}.yml/ {Application}http: // localhost: 4001/client-dev.yml
config client
เราใช้ config-client เป็นไคลเอนต์ config และเพิ่มการพึ่งพา:
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> <การพึ่งพา> <roupId> org.springframework.cloud </groupid>
กำหนดค่าใน bootstrap.yml (bootstrap.yml จะโหลดก่อน application.yml):
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: ไคลเอนต์คลาวด์: config: uri: http: // localhost: 4001/## แสดงถึงที่อยู่ของโปรไฟล์ศูนย์การกำหนดค่า: dev # เทียบเท่ากับ Spring.profiles แอตทริบิวต์ที่ใช้งานอยู่
สร้าง testController ใน config-client:
@RestControllerPublic คลาส testController {@Value ("$ {info}") ข้อมูลสตริงส่วนตัว; @RequestMapping (value = "/getInfo") สตริงสาธารณะ getInfo () {return this.info; -เยี่ยมชม http: // localhost: 4002/getinfo
แก้ไขโปรไฟล์ในไฟล์การกำหนดค่า config-client เพื่อ prod และเข้าถึงเพื่อดูผลลัพธ์
ตอนนี้เราได้นำไฟล์การกำหนดค่ามาใช้เพื่อจัดการในลักษณะที่เป็นเอกภาพ แต่หลังจากแก้ไขไฟล์การกำหนดค่าแล้วเราจะไม่รีสตาร์ทและมีผลได้อย่างไร
เราแนะนำการพึ่งพาใน config-client:
<การพึ่งพา> <roupId> org.springframework.boot </roupid> <ratifactid> Spring-Boot-Starter-Actuator </artifactid>
เพิ่มคำอธิบายประกอบ @RefreshScope ลงในคลาสที่ต้องการการรีเฟรชแบบไดนามิกที่นี่เราเพิ่มลงใน TestController และปิดใช้งานการรับรองความถูกต้องของแอคทูเอเตอร์ในไฟล์กำหนดค่า:
การจัดการ: ความปลอดภัย: เปิดใช้งาน: เท็จ
รีสตาร์ทโครงการ http: // localhost: 4002/getinfo ผลลัพธ์คือ: config-dev และตอนนี้แก้ไขไฟล์ config-dev.yml:
ข้อมูล: config-dev-1.0
เรียกวิธีแอคทูเอเตอร์และรีเฟรชด้วยตนเอง http: // localhost: 4002/รีเฟรชหมายเหตุ: ต้องเป็นวิธีการโพสต์ คุณสามารถดูว่าการเปลี่ยนแปลงคืออะไร:
["ข้อมูล"]
เยี่ยมชม http: // localhost: 4002/getinfo อีกครั้งและผลลัพธ์คือ: config-dev-1.0
เราพบว่าแม้ว่าการกำหนดค่าสามารถรีเฟรชแบบไดนามิกวิธีการรีเฟรชจะต้องเรียกด้วยตนเองทุกครั้ง ถ้าฉันมี 1,000 บริการฉันต้องเรียกมันว่า 1,000 ครั้ง มีวิธีที่ดีกว่านี้ไหม นั่นคือการใช้ร่วมกับบัสคลาวด์สปริง
มีให้บริการสูง
ตอนนี้เซิร์ฟเวอร์ config ของเราเป็นบริการจุดเดียวและเมื่อไคลเอนต์ config หลังถูกวางสายมันจะไม่ถูกใช้ ดังนั้นในการสร้างเซิร์ฟเวอร์ config ต้องพร้อมใช้งานสูงดังนั้นจะทำอย่างไร? มันง่ายมาก เช่นเดียวกับความพร้อมใช้งานสูงของยูเรก้าที่กล่าวถึงก่อนหน้านี้คุณจะต้องปรับใช้เซิร์ฟเวอร์ config อีกหลายตัวเท่านั้น
เราใช้โครงการยูเรก้าเป็นศูนย์ลงทะเบียนกับพอร์ต: 7001
คัดลอก config-server ไปยัง config-server-1 พร้อมพอร์ต: 4003 และลงทะเบียนทั้งสองเซิร์ฟเวอร์ config ไปยัง Registry Center
ลงทะเบียน config-client ไปยังรีจิสทรีและระบุเพื่อรับ config server จาก Eureka:
ฤดูใบไม้ผลิ: คลาวด์: config: #URI: http: // localhost: 4001/## แสดงถึงที่อยู่ของศูนย์การกำหนดค่าโดยตรงระบุโปรไฟล์ที่อยู่เซิร์ฟเวอร์ config โดยตรง: dev #label: config discovery: เปิดใช้งาน: True # เปิดใช้งาน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น