ในกระบวนการพัฒนาโดยใช้ Springboot เรามักจะต้องจัดการกับสถานการณ์ที่เริ่มให้บริการสถานะการบริการจะต้องลงทะเบียนกับศูนย์ลงทะเบียนบริการ (เช่น ZK) ดังนั้นเมื่อสถานะการบริการเปลี่ยนแปลงการกำจัดความล้มเหลวและการปรับสมดุลโหลดสามารถทำได้
ฉันพบสองวิธีในการลงทะเบียน:
1. ลงทะเบียนโดยตรงหลังจากการสมัคร Webapplication ของ Spring เริ่มต้นขึ้น
2. หลังจากเริ่มต้นคอนเทนเนอร์ Servlet แล้วให้ลงทะเบียนผ่านผู้ฟัง
บทความนี้ใช้การสาธิตเพื่ออธิบายวิธีการลงทะเบียนทั้งสองนี้โดยใช้รูปแบบการลงทะเบียนแบบดั้งเดิมกับ ZK
1. ลงทะเบียนหลังจากเริ่มต้น Webapplication Spring
มาดูรหัสก่อน
@springbootaplapplicationPublic คลาส webapplication {ส่วนตัว logger logger สุดท้ายคงที่ = loggerFactory.getLogger (webapplication.class); บูลีนผันผวนแบบคงที่ส่วนตัว is_registry = false; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {applicationcontext context = run (webapplication.class, args); if (is_registry) {logger.info ("ลงทะเบียน 2: หลังจากการเชื่อมต่อ webapplication เริ่มขึ้น"); ZkClient ZkClient = context.getBean (zklient.class); zkclient.register (); is_registry = true; logger.info ("ลงทะเบียน 2: การลงทะเบียนสำเร็จ"); -ที่นี่เราได้รับ zkclient ใน webapplication และลงทะเบียน
ควรสังเกตที่นี่ว่าเราใช้ ApplicationContext เพื่อรับถั่วของ zkclient เหตุผลก็คือคุณไม่สามารถฉีดถั่วด้วยวิธีที่ไม่ได้ใช้งานโดยอัตโนมัติในระหว่างการเริ่มต้นของ webapplication เนื่องจากการกำหนดค่าทั้งหมดจะถูกอ่านและถั่วจะเริ่มต้นในระหว่างการเริ่มต้นของ webapplication คุณไม่สามารถฉีดถั่วก่อนที่การเริ่มต้นจะเสร็จสมบูรณ์
รหัสรายละเอียดสำหรับการลงทะเบียนจะไม่ถูกขยายที่นี่
2. หลังจากที่คอนเทนเนอร์ servlet เริ่มต้นแล้วให้ลงทะเบียนผ่านผู้ฟัง
หรือเริ่มรหัสก่อน
@WebListenerPublic คลาส registerListener ใช้ servletContextListener {ป้องกัน logger สุดท้าย logger = loggerFactory.getLogger (this.getClass ()); บูลีนผันผวนแบบคงที่ส่วนตัว is_registry = false; @autowired zkclient ส่วนตัว zkclient; @Override โมฆะสาธารณะบริบท (servletContextEvent ServletContextEvent) {ลอง {ถ้า (! is_registry) {logger.info ("ลงทะเบียน 1: หลังจากคอนเทนเนอร์ servlet เริ่มสำเร็จ"); zkclient.register (); logger.info ("ลงทะเบียน 1: ลงทะเบียนสำเร็จ"); } is_registry = true; } catch (ข้อยกเว้น e) {is_registry = false; logger.info ("ลงทะเบียน 1: การลงทะเบียนล้มเหลว"); }} @Override เป็นโมฆะสาธารณะบริบท (servletContextEvent servletContextEvent) {ถ้า (is_registry) {zkclient.stop (); -คุณต้องเขียนผู้ฟังก่อน ผู้ฟังนี้ใช้อินเทอร์เฟซ servletContextListener และใส่คำอธิบายประกอบด้วย @WebListener นี่คือวิธีการฟังคำอธิบายประกอบ Springboot
หลังจากเริ่มต้นคอนเทนเนอร์ Servlet แล้ววิธีการบริบทของผู้ฟังจะถูกเรียก หากคอนเทนเนอร์ servlet ถูกทำลายและไม่สามารถให้บริการได้วิธีการบริบทของผู้ฟังจะถูกเรียก กล่าวอีกนัยหนึ่งผู้ฟังนี้กำลังฟังสถานะของคอนเทนเนอร์ servlet
จากนั้นคุณเพียงแค่ต้องเปิดการกำหนดค่าผู้ฟังในคลาสหลักของแอปพลิเคชัน
@servletComponentscan@springbootapplicationpublic คลาส webapplication {}3. การเปรียบเทียบสองวิธีนี้
สำหรับบริการเว็บที่ให้โปรโตคอล HTTP ภายนอกการลงทะเบียนของคอนเทนเนอร์ Servlet จะชัดเจนขึ้นในความหมาย อย่างไรก็ตามหากคอนเทนเนอร์ฤดูใบไม้ผลิของคุณเริ่มยาวเกินไปการเริ่มต้น Servlet อาจเสร็จสมบูรณ์และลงทะเบียน แต่บริการไม่สามารถให้การเข้าถึงเวลาช่องว่างภายนอกดังนั้นโดยทั่วไปฉันใช้วิธีแรกในการลงทะเบียน
สถานการณ์นี้เป็นเช่นนี้
จะเห็นได้ว่าหลังจากการลงทะเบียน servlet สำเร็จแล้ว WebApplication ยังไม่ได้เริ่มต้นและบริการไม่สามารถให้การเข้าถึงได้ตามปกติในเวลานี้
คุณสามารถเห็นได้ใน ZK ว่าการลงทะเบียนทั้งสองประสบความสำเร็จ
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดเกี่ยวกับศูนย์ทะเบียนบริการลงทะเบียน Springboot (ZK) ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!