การแนะนำ
บางครั้งไคลเอนต์จำเป็นต้องลองใหม่เมื่อเซิร์ฟเวอร์ config ไม่ตอบสนองเพื่อให้เวลาเซิร์ฟเวอร์กำหนดค่าในการกู้คืน การใช้ส่วนประกอบลองใหม่ที่ให้ไว้ในฤดูใบไม้ผลิเราสามารถกำหนดค่ากลไกการลองใหม่ได้อย่างง่ายดายรวมถึงช่วงเวลาลองอีกครั้งจำนวนเวลาลองใหม่ ฯลฯ ฉันจะไม่พูดด้านล่างมากนักลองดูการแนะนำรายละเอียดร่วมกัน
ซอร์สโค้ดโครงการ
คลิกเพื่อดาวน์โหลด
เพิ่มการพึ่งพาสำหรับโครงการเว็บ
ในการเปิดใช้งานฟังก์ชั่นการลองใหม่ของไคลเอน
<การพึ่งพา> <roupID> org.springframework.retry </groupId> <ratifactid> สปริง-รีเธน </artifactid> <cersion> 1.2.2.Release </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา
จากนั้นเพิ่มการกำหนดค่าต่อไปนี้ในไฟล์ bootstrap.yml:
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: Web-client Cloud: config: URI: http: // localhost: 8888 Fail-Fast: TRUE retry: Interval Interval: 1000 Max-Attempts: 6 Max-Interval: 2000 Cutterer: 1.1
ก่อนอื่นให้ Spring.cloud.config.fail-fast เป็นจริงนั่นคือถ้าไม่สามารถกำหนดค่าระยะไกลได้มันจะล้มเหลวทันที แต่ลองอีกครั้งด้วยการกำหนดค่าต่อไปนี้
Spring.cloud.config.Retry เด็กทุกคนเป็นค่าเริ่มต้น:
ทดสอบ
หากเราใช้โครงการในบทช่วยสอนนี้เราจำเป็นต้องเริ่มโครงการ configserver ก่อนจากนั้นเริ่มโครงการรีจิสทรีและเริ่มต้นยูเรก้าเนื่องจากเว็บไคลเอนต์ใช้บริการยูเรก้าจากนั้นปิดการกำหนดค่าเซิร์ฟเวอร์แล้วเริ่มโครงการเว็บ เราจะเห็นบันทึกต่อไปนี้:
2018-05-15 16: 04: 58.421 ข้อมูล 2663 --- [Main] CCCCONFIGSERVICEPROPERTYSOURCELATOR: การเรียกใช้การกำหนดค่าจากเซิร์ฟเวอร์ที่: http: // localhost: 8888
หลังจาก 6 ความล้มเหลวลองอีกครั้งลูกค้าไม่สามารถเริ่มต้นได้ หากเปิดใช้งาน Configserver มิดเวย์เว็บไคลเอนต์จะเริ่มสำเร็จ
การควบคุมอย่างละเอียดลองใหม่
เราสามารถใช้กลไกการควบคุมการควบคุมที่ละเอียดยิ่งขึ้นในรหัสสร้าง Java Class ใหม่ CN.ZXUQIAN.CONFIGURATIONS.RetryConfiguration ในโครงการเว็บและเพิ่มรหัสต่อไปนี้:
แพ็คเกจ cn.zxuqian.configurations; นำเข้า org.slf4j.logger; นำเข้า org.slf4j.loggerfactory; นำเข้า org.springframework.boot.autoconfigure.condition.conditionalonmissingbean; org.springframework.retry.interceptor.retryInterceptorBuilder; นำเข้า org.springframework.Retry.Interceptor.RetryOperationsInterceptor; Public Class retryConfiguration @Bean @ConditionAlonMissingBean (name = "configserverRetryInterceptor") Public RetryoperationsInterceptor configserverRetryInterceptor () {log.info (String.format ("configserverRetryInterceptor: การเปลี่ยน backoffoptions" + " return retryinterceptorbuilder. stateless () .backoffoptions (1,000, 1.2, 5000) .maxattempts (10) .build (); - ที่นี่เรากำหนดเมธอด configserverRetryInterceptor สำหรับสปริงลองใหม่โดยใช้ตัวดักจับซ้ำที่กำหนดเองของเรา วิธีการใช้ retryinterceptorbuilder เพื่อสร้าง retryoperationsinterceptor แบบไร้สัญชาติตามที่ต้องการและตั้งค่าช่วงเวลาเริ่มต้นใหม่เป็น 1,000 มิลลิวินาทีเพิ่มขึ้นหลายครั้งคือ 1.2 เท่าช่วงการลองใหม่สูงสุดคือ 5,000 มิลลิวินาที ผู้สร้างยังให้อินเทอร์เฟซเช่นการกำหนดค่ากลไกการลองใหม่ซึ่งผู้อ่านที่สนใจสามารถศึกษาได้ด้วยตนเอง
@ConditionAlonMissingBean ระบุว่าถั่วนี้ถูกจับคู่เมื่อไม่มีถั่วชื่อ configserverRetryInterceptor ใน beanfactory
ในที่สุดใน SRC/Main/Resources/Meta-INF/(ไม่สามารถสร้างโฟลเดอร์) สร้างไฟล์ Spring.Factories ใหม่โดยระบุว่าเราเพิ่งสร้างคลาสเป็นการกำหนดค่าเมื่อเริ่มต้นเพื่อให้มีผลก่อนที่จะได้รับการกำหนดค่าระยะไกล:
org.springframework.cloud.bootstrap.bootstrapConfiguration = cn.zxuqian.configurations.reterconfiguration
ทดสอบ
ในที่สุดเริ่มโครงการเว็บภายใต้เงื่อนไขของการปิดการกำหนดค่าเซิร์ฟเวอร์และจากนั้นคุณจะเห็นว่าโครงการเริ่มล้มเหลวหลังจากการลองอีกสิบครั้ง
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com