MuleSoft - การจัดการข้อยกเว้นล่อ
ในกรณีของทุกโครงการข้อเท็จจริงเกี่ยวกับข้อยกเว้นคือสิ่งที่ผูกพันที่จะเกิดขึ้น นั่นคือเหตุผลที่การจับแยกประเภทและจัดการข้อยกเว้นจึงเป็นสิ่งสำคัญเพื่อไม่ให้ระบบ / แอปพลิเคชันอยู่ในสถานะที่ไม่สอดคล้องกัน มีกลยุทธ์การยกเว้นเริ่มต้นซึ่งใช้กับแอปพลิเคชัน Mule ทั้งหมดโดยปริยาย การย้อนกลับธุรกรรมที่รอดำเนินการโดยอัตโนมัติเป็นกลยุทธ์การยกเว้นเริ่มต้น
ข้อยกเว้นใน Mule
ก่อนที่จะดำน้ำลึกลงไปในการจัดการที่ยอดเยี่ยมเราควรทำความเข้าใจว่าข้อยกเว้นประเภทใดที่สามารถเกิดขึ้นได้พร้อมกับคำถามพื้นฐานสามข้อที่นักพัฒนาต้องมีในขณะออกแบบตัวจัดการข้อยกเว้น
ขนส่งไหนสำคัญ?
คำถามนี้มีความเกี่ยวข้องเพียงพอก่อนที่จะออกแบบตัวจัดการข้อยกเว้นเนื่องจากการขนส่งทั้งหมดไม่รองรับการข้ามชาติ
File หรือ HTTPไม่รองรับการทำธุรกรรม นั่นคือเหตุผลว่าทำไมหากมีข้อยกเว้นเกิดขึ้นในกรณีเหล่านี้เราต้องจัดการด้วยตนเอง
Databasesรองรับการทำธุรกรรม ในขณะที่ออกแบบตัวจัดการข้อยกเว้นในกรณีนี้เราต้องจำไว้ว่าธุรกรรมฐานข้อมูลสามารถย้อนกลับได้โดยอัตโนมัติ (หากจำเป็น)
ในกรณีที่ REST APIsเราควรทราบว่าควรส่งคืนรหัสสถานะ HTTP ที่ถูกต้อง ตัวอย่างเช่น 404 สำหรับทรัพยากรไม่พบ
จะใช้รูปแบบการแลกเปลี่ยนข้อความแบบใด
ในขณะที่ออกแบบตัวจัดการข้อยกเว้นเราต้องดูแลเกี่ยวกับรูปแบบการแลกเปลี่ยนข้อความ อาจมีรูปแบบข้อความซิงโครนัส (ขอ - ตอบกลับ) หรืออะซิงโครนัส (ลืมไฟ)
Synchronous message pattern ขึ้นอยู่กับรูปแบบการตอบกลับคำขอซึ่งหมายความว่ารูปแบบนี้จะคาดหวังการตอบกลับและจะถูกบล็อกจนกว่าจะมีการตอบกลับหรือหมดเวลา
Asynchronous message pattern ขึ้นอยู่กับรูปแบบ fire-forget ซึ่งหมายความว่ารูปแบบนี้ถือว่าคำขอจะได้รับการดำเนินการในที่สุด
เป็นข้อยกเว้นประเภทใด
กฎง่ายๆคือคุณจะจัดการกับข้อยกเว้นตามประเภท เป็นสิ่งสำคัญมากที่จะต้องทราบว่าข้อยกเว้นนั้นเกิดจากปัญหาของระบบ / ทางเทคนิคหรือปัญหาทางธุรกิจหรือไม่?
เกิดข้อยกเว้นโดย system/technical issue (เช่นเครือข่ายขัดข้อง) ควรจัดการโดยอัตโนมัติโดยกลไกการลองใหม่
ในทางกลับกันเกิดข้อยกเว้น by a business issue (เช่นข้อมูลที่ไม่ถูกต้อง) ไม่ควรแก้ไขโดยใช้กลไกการลองใหม่เนื่องจากไม่มีประโยชน์ที่จะลองใหม่โดยไม่แก้ไขสาเหตุที่แท้จริง
ทำไมต้องจัดหมวดหมู่ข้อยกเว้น?
ดังที่เราทราบดีว่าข้อยกเว้นทั้งหมดไม่เหมือนกันการจัดหมวดหมู่ข้อยกเว้นจึงเป็นเรื่องสำคัญมาก ในระดับสูงข้อยกเว้นสามารถแบ่งออกเป็นสองประเภทต่อไปนี้ -
ข้อยกเว้นทางธุรกิจ
สาเหตุหลักของการเกิดข้อยกเว้นทางธุรกิจคือข้อมูลที่ไม่ถูกต้องหรือขั้นตอนกระบวนการไม่ถูกต้อง โดยทั่วไปแล้วข้อยกเว้นประเภทนี้จะไม่สามารถดึงกลับได้ตามธรรมชาติดังนั้นการกำหนดค่าไฟล์rollback. แม้กระทั่งการสมัครretryกลไกจะไม่สมเหตุสมผลเพราะไม่มีประโยชน์ที่จะลองใหม่โดยไม่แก้ไขสาเหตุที่แท้จริง ในการจัดการกับข้อยกเว้นดังกล่าวการประมวลผลควรหยุดลงทันทีและข้อยกเว้นจะถูกส่งกลับเป็นการตอบกลับไปยังคิวจดหมายตาย ควรส่งการแจ้งเตือนไปยังฝ่ายปฏิบัติการด้วย
ข้อยกเว้นที่ไม่ใช่ธุรกิจ
สาเหตุหลักของการเกิดข้อยกเว้นที่ไม่ใช่ธุรกิจคือปัญหาของระบบหรือปัญหาทางเทคนิค ข้อยกเว้นประเภทนี้สามารถเรียกคืนได้ตามธรรมชาติและด้วยเหตุนี้จึงเป็นการดีที่จะกำหนดค่าไฟล์retry กลไกเพื่อแก้ไขข้อยกเว้นเหล่านี้
กลยุทธ์การจัดการข้อยกเว้น
Mule มีกลยุทธ์การจัดการข้อยกเว้นห้าประการต่อไปนี้ -
กลยุทธ์การยกเว้นเริ่มต้น
Mule ใช้กลยุทธ์นี้กับกระแสของ Mule โดยปริยาย สามารถจัดการข้อยกเว้นทั้งหมดในโฟลว์ของเราได้ แต่ยังสามารถลบล้างได้ด้วยการเพิ่มกลยุทธ์ข้อยกเว้นการจับตัวเลือกหรือการย้อนกลับ กลยุทธ์ข้อยกเว้นนี้จะย้อนกลับธุรกรรมที่รอดำเนินการและบันทึกข้อยกเว้นด้วย ลักษณะสำคัญของกลยุทธ์การยกเว้นนี้คือจะบันทึกข้อยกเว้นด้วยหากไม่มีธุรกรรม
เนื่องจากเป็นกลยุทธ์เริ่มต้น Mule จะใช้สิ่งนี้เมื่อเกิดข้อผิดพลาดใด ๆ ในโฟลว์ เราไม่สามารถกำหนดค่าใน AnyPoint studio
กลยุทธ์การยกเว้นย้อนกลับ
สมมติว่าหากไม่มีวิธีแก้ไขที่เป็นไปได้ในการแก้ไขข้อผิดพลาดจะทำอย่างไร? วิธีแก้ปัญหาคือใช้กลยุทธ์ Rollback Exception ซึ่งจะย้อนกลับธุรกรรมพร้อมกับการส่งข้อความไปยังตัวเชื่อมต่อขาเข้าของโฟลว์หลักเพื่อประมวลผลข้อความอีกครั้ง กลยุทธ์นี้ยังมีประโยชน์มากเมื่อเราต้องการประมวลผลข้อความอีกครั้ง
Example
กลยุทธ์นี้สามารถนำไปใช้กับธุรกรรมธนาคารที่มีการฝากเงินเข้าบัญชีเงินฝากออมทรัพย์ เราสามารถกำหนดค่ากลยุทธ์การยกเว้นการย้อนกลับได้ที่นี่เพราะในกรณีที่เกิดข้อผิดพลาดระหว่างการทำธุรกรรมกลยุทธ์นี้จะย้อนข้อความกลับไปที่จุดเริ่มต้นของขั้นตอนเพื่อพยายามประมวลผลใหม่
จับกลยุทธ์ข้อยกเว้น
กลยุทธ์นี้จับข้อยกเว้นทั้งหมดที่เกิดขึ้นภายในโฟลว์พาเรนต์ มันจะลบล้างกลยุทธ์การยกเว้นเริ่มต้นของ Mule โดยการประมวลผลข้อยกเว้นทั้งหมดที่เกิดจากโฟลว์พาเรนต์ เราสามารถใช้กลยุทธ์ข้อยกเว้นการจับเพื่อหลีกเลี่ยงการเผยแพร่ข้อยกเว้นไปยังตัวเชื่อมต่อขาเข้าและโฟลว์พาเรนต์ได้เช่นกัน
กลยุทธ์นี้ยังช่วยให้มั่นใจได้ว่าธุรกรรมที่ประมวลผลโดยโฟลว์จะไม่ย้อนกลับเมื่อเกิดข้อยกเว้น
Example
กลยุทธ์นี้สามารถใช้ได้กับระบบการจองเที่ยวบินที่เรามีขั้นตอนในการประมวลผลข้อความจากคิว ข้อความที่เพิ่มขึ้นจะเพิ่มคุณสมบัติในข้อความสำหรับการกำหนดที่นั่งแล้วส่งข้อความไปยังคิวอื่น
ตอนนี้หากมีข้อผิดพลาดเกิดขึ้นในขั้นตอนนี้ข้อความจะทำให้เกิดข้อยกเว้น ที่นี่กลยุทธ์การยกเว้นการจับของเราสามารถเพิ่มส่วนหัวที่มีข้อความที่เหมาะสมและสามารถผลักดันข้อความนั้นออกจากขั้นตอนไปยังคิวถัดไป
กลยุทธ์การยกเว้นทางเลือก
ในกรณีที่คุณต้องการจัดการข้อยกเว้นตามเนื้อหาข้อความดังนั้นกลยุทธ์การยกเว้นตัวเลือกจะเป็นทางเลือกที่ดีที่สุด การทำงานของกลยุทธ์ข้อยกเว้นนี้จะเป็นดังนี้ -
- ขั้นแรกจะจับข้อยกเว้นทั้งหมดที่เกิดขึ้นภายในโฟลว์พาเรนต์
- จากนั้นจะตรวจสอบเนื้อหาข้อความและประเภทข้อยกเว้น
- และสุดท้ายจะกำหนดเส้นทางข้อความไปยังกลยุทธ์ข้อยกเว้นที่เหมาะสม
จะมีกลยุทธ์ยกเว้นมากกว่าหนึ่งอย่างเช่น Catch หรือ Rollback ซึ่งกำหนดไว้ในกลยุทธ์การยกเว้นตัวเลือก ในกรณีที่ไม่มีกลยุทธ์ที่กำหนดไว้ภายใต้กลยุทธ์ข้อยกเว้นนี้ระบบจะกำหนดเส้นทางข้อความไปยังกลยุทธ์ข้อยกเว้นเริ่มต้น จะไม่ดำเนินการกระทำหรือย้อนกลับหรือใช้กิจกรรมใด ๆ
กลยุทธ์การยกเว้นการอ้างอิง
นี่หมายถึงกลยุทธ์ข้อยกเว้นทั่วไปที่กำหนดไว้ในไฟล์คอนฟิกูเรชันแยกต่างหาก ในกรณีที่ข้อความแสดงข้อยกเว้นกลยุทธ์ข้อยกเว้นนี้จะอ้างถึงพารามิเตอร์การจัดการข้อผิดพลาดที่กำหนดไว้ในกลยุทธ์การจับการย้อนกลับหรือการยกเว้นตัวเลือกทั่วโลก เช่นเดียวกับกลยุทธ์การยกเว้นทางเลือกจะไม่ทำการกระทำหรือย้อนกลับหรือใช้กิจกรรมใด ๆ ด้วย