คำนำ
Spring Cloud เป็นกรอบการทำงานที่สมบูรณ์สำหรับการใช้งาน microservices ตามสปริงบูต มันให้ส่วนประกอบที่จำเป็นสำหรับการพัฒนา microservice เช่นการจัดการการกำหนดค่าการค้นพบบริการเบรกเกอร์วงจรการกำหนดเส้นทางอัจฉริยะตัวแทนไมโครบัสควบคุมการล็อคทั่วโลกแคมเปญการตัดสินใจเซสชันกระจายและการจัดการสถานะคลัสเตอร์ สิ่งที่สำคัญที่สุดคือถ้าคุณใช้กับ Framework Spring Boot มันจะทำให้คุณสะดวกในการพัฒนาบริการคลาวด์ด้วยสถาปัตยกรรม Microservice Spring Cloud มีเฟรมย่อยจำนวนมากซึ่งสปริงคลาวด์ Netflix เป็นหนึ่งในกรอบการทำงานที่พัฒนาโดย Netflix และต่อมารวมอยู่ในตระกูล Spring Cloud โมดูลหลักของมัน ได้แก่ : การค้นพบบริการเบรกเกอร์และการตรวจสอบการกำหนดเส้นทางอัจฉริยะการปรับสมดุลโหลดไคลเอนต์ ฯลฯ
บทความนี้จะแนะนำเนื้อหาที่เกี่ยวข้องของการหมดเวลาส่วนประกอบของ Spring Cloud และแบ่งปันสำหรับการอ้างอิงและการเรียนรู้ของคุณ ฉันจะไม่พูดมากขึ้นด้านล่างลองมาดูการแนะนำรายละเอียดด้วยกัน
หมดเวลาของริบบิ้น
การตั้งค่าทั่วโลก:
Ribbon: Readtimeout: 60000ConnectTimeOut: 60000
การตั้งค่าท้องถิ่น:
Service-ID: Ribbon: ReadTimeOut: 1000ConnectTimeOut: 1000
ในหมู่พวกเขา Service-ID เป็นชื่อโฮสต์เสมือนจริงที่ใช้โดย Ribbon ซึ่งโดยทั่วไปจะเหมือนกับชื่อบริการที่ลงทะเบียนบนเซิร์ฟเวอร์ยูเรก้านั่นคือมันเหมือนกับ spring.application.name
การหมดเวลาของ Feign
เริ่มต้นด้วย Spring Cloud Edgware Feign รองรับการกำหนดค่าการหมดเวลาด้วยคุณสมบัติ:
Feign: ไคลเอนต์: config: feignname: ConnectTimeout: 5000 ReadTimeOut: 5000
สำหรับรุ่นเก่าคุณสามารถเขียน feign.Request.Options , อ้างอิง: org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration#feignRequestOptions วิธีการเขียน
การหมดเวลา RestTemplate
บางครั้งเราอาจใช้ RestTemplate เช่น
@bean@loadbalancedpublic resttemplate resttemplate () {return new resttemplate ();}ในเวลานี้การหมดเวลาสามารถตั้งค่าในวิธีต่อไปนี้:
@bean@loadbalancedpublic resttemplate resttemplate () {simpleclienthttprequestfactory simpleclienthtttprequestfactory = ใหม่ simpleclienthtttprequestfactory (); RestTemplate (SimpleClienthtttPrequestFactory);}การหมดเวลาของ Zuul
การหมดเวลาของ Zuul นั้นซับซ้อนกว่าเนื่องจาก Zuul รวมริบบิ้นและ Hystrix เข้าด้วยกัน ต่อไปนี้เป็นสองสถานการณ์:
ถ้าเส้นทางของ Zuul ใช้ริบบิ้น
จากนั้น: การหมดเวลาของ Zuul เกี่ยวข้องกับ Ribbon และ Hystrix ในเวลานี้การหมดเวลาของ Zuul สามารถกำหนดค่าได้ในทำนองเดียวกันกับสิ่งต่อไปนี้:
Hystrix: คำสั่ง: ค่าเริ่มต้น: การดำเนินการ: แยก: เธรด: TimeOutInMilliseconds: 1000ribbon: ReadTimeOut: 1000 ConnectTimeOut: 1000
การวิเคราะห์รหัส: ในกรณีนี้ตัวกรองที่ใช้สำหรับการส่งต่อ zuul คือ org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter ซึ่งรวม Hystrix และ Ribbon
หากเส้นทางของ Zuul ไม่ได้ใช้ริบบิ้น
ตัวอย่างเช่น: การกำหนดค่าการกำหนดเส้นทางของ Zuul มีดังนี้:
Zuul: เส้นทาง: ผู้ใช้เส้นทาง: # ในวิธีการกำหนดค่านี้ผู้ใช้เส้นทางเพียงให้ชื่อเส้นทางและสามารถตั้งชื่อได้ที่ Will URL: http: // localhost: 8000/ # เส้นทาง URL ที่ระบุ:/ผู้ใช้/** # เส้นทางที่สอดคล้องกับ URL
จากนั้นการหมดเวลาของ Zuul ในเวลานี้เกี่ยวข้องกับการกำหนดค่าสองแบบต่อไปนี้เท่านั้น:
Zuul: โฮสต์: ซ็อกเก็ต-ไทม์-มิลลิส: 10,000 Connect-Timeout-Millis: 2000
การวิเคราะห์รหัส: วิธีการกำหนดค่าการกำหนดเส้นทาง URL โดยตรงไม่ได้ใช้สำหรับริบบิ้นหรือ hystrix ตัวกรองที่ใช้สำหรับการส่งต่อ zuul คือ org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter ในตัวกรองนี้ Zuul ใช้ Apache httpClient เพื่อส่งต่อ
ในสถานการณ์จริงบางครั้งวิธีการกำหนดเส้นทางทั้งสองอาจถูกใช้ร่วมกันดังนั้นจึงขอแนะนำให้คุณกำหนดค่าแอตทริบิวต์ข้างต้นทั้งหมด
การหมดเวลา Hystrix
Hystrix: คำสั่ง: ค่าเริ่มต้น: การดำเนินการ: หมดเวลา: เปิดใช้งาน: การแยกจริง: เธรด: TimeOutinMilliseconds: 1000
ดังกล่าวข้างต้นการหมดเวลาเริ่มต้นสำหรับ Hystrix คือ 1 วินาที กลไกการหมดเวลาเปิดใช้งานโดยค่าเริ่มต้น หากต้องการปิดการหมดเวลาของ Hystrix ให้ตั้งค่า xxx.enabled เป็น FALSE
เคล็ดลับ
หากใช้ส่วนประกอบกับ Hystrix โดยทั่วไปแนะนำว่าการหมดเวลา Hystrix> หมดเวลาส่วนประกอบอื่น ๆ มิฉะนั้นอาจทำให้คุณลักษณะการลองใหม่ล้มเหลว
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com