MuleSoft - การจัดการข้อผิดพลาด Mule

การจัดการข้อผิดพลาด Mule ใหม่เป็นหนึ่งในการเปลี่ยนแปลงที่ใหญ่ที่สุดและสำคัญใน Mule 4 การส่งข้อผิดพลาดใหม่อาจดูซับซ้อน แต่จะดีกว่าและมีประสิทธิภาพมากกว่า ในบทนี้เราจะพูดถึงส่วนประกอบของข้อผิดพลาด Mule ประเภทข้อผิดพลาดประเภทของข้อผิดพลาด Mule และส่วนประกอบสำหรับการจัดการข้อผิดพลาด Mule

ส่วนประกอบของ Mule Error

ข้อผิดพลาด Mule เป็นผลมาจากความล้มเหลวของข้อยกเว้น Mule มีองค์ประกอบดังต่อไปนี้ -

คำอธิบาย

เป็นส่วนประกอบที่สำคัญของข้อผิดพลาด Mule ซึ่งจะให้คำอธิบายเกี่ยวกับปัญหา การแสดงออกมีดังนี้ -

#[error.description]

ประเภท

ส่วนประกอบ Type ของข้อผิดพลาด Mule ใช้เพื่อกำหนดลักษณะของปัญหา นอกจากนี้ยังอนุญาตให้กำหนดเส้นทางภายในตัวจัดการข้อผิดพลาด การแสดงออกมีดังนี้ -

#[error.errorType]

สาเหตุ

คอมโพเนนต์สาเหตุของข้อผิดพลาด Mule ให้ java throwable ที่เป็นสาเหตุของความล้มเหลว การแสดงออกมีดังนี้ -

#[error.cause]

ข้อความ

ข้อความส่วนประกอบของข้อผิดพลาดล่อแสดงข้อความเพิ่มเติมเกี่ยวกับข้อผิดพลาด การแสดงออกมีดังนี้ -

#[error.errorMessage]

ข้อผิดพลาดของเด็ก

ข้อผิดพลาดเด็กส่วนประกอบของข้อผิดพลาดล่อให้คอลเลกชันที่ไม่จำเป็นของข้อผิดพลาดภายใน ข้อผิดพลาดภายในเหล่านี้ส่วนใหญ่จะใช้โดยองค์ประกอบเช่น Scatter-Gather เพื่อให้ข้อผิดพลาดรวมของเส้นทาง การแสดงออกมีดังนี้ -

#[error.childErrors]

ตัวอย่าง

ในกรณีที่คำขอ HTTP ล้มเหลวด้วยรหัสสถานะ 401 ข้อผิดพลาด Mule มีดังต่อไปนี้ -

Description: HTTP GET on resource ‘http://localhost:8181/TestApp’ 
failed: unauthorized (401)
Type: HTTP:UNAUTHORIZED
Cause: a ResponseValidatorTypedException instance
Error Message: { "message" : "Could not authorize the user." }
ส.น.น. ประเภทข้อผิดพลาดและคำอธิบาย
1

TRANSFORMATION

ประเภทข้อผิดพลาดนี้ระบุว่ามีข้อผิดพลาดเกิดขึ้นขณะแปลงค่า การแปลงเป็นการแปลงภายใน Mule Runtime ไม่ใช่การแปลง DataWeave

2

EXPRESSION

ชนิดของข้อผิดพลาดนี้บ่งชี้ข้อผิดพลาดที่เกิดขึ้นขณะประเมินนิพจน์

3

VALIDATION

ประเภทข้อผิดพลาดนี้บ่งชี้ว่าเกิดข้อผิดพลาดในการตรวจสอบความถูกต้อง

4

DUPLICATE_MESSAGE

ข้อผิดพลาดในการตรวจสอบความถูกต้องซึ่งเกิดขึ้นเมื่อมีการประมวลผลข้อความสองครั้ง

5

REDELIVERY_EXHAUSTED

ประเภทข้อผิดพลาดนี้เกิดขึ้นเมื่อความพยายามสูงสุดในการประมวลผลข้อความจากแหล่งที่มาใหม่หมดลง

6

CONNECTIVITY

ประเภทข้อผิดพลาดนี้บ่งชี้ปัญหาขณะสร้างการเชื่อมต่อ

7

ROUTING

ประเภทข้อผิดพลาดนี้ระบุว่ามีข้อผิดพลาดเกิดขึ้นขณะกำหนดเส้นทางข้อความ

8

SECURITY

ประเภทข้อผิดพลาดนี้ระบุว่าเกิดข้อผิดพลาดด้านความปลอดภัย ตัวอย่างเช่นได้รับข้อมูลรับรองที่ไม่ถูกต้อง

9

STREAM_MAXIMUM_SIZE_EXCEEDED

ประเภทข้อผิดพลาดนี้เกิดขึ้นเมื่อขนาดสูงสุดที่อนุญาตสำหรับสตรีมหมดลง

10

TIMEOUT

บ่งชี้การหมดเวลาขณะประมวลผลข้อความ

11

UNKNOWN

ประเภทข้อผิดพลาดนี้บ่งชี้ข้อผิดพลาดที่ไม่คาดคิดเกิดขึ้น

12

SOURCE

แสดงถึงการเกิดข้อผิดพลาดในแหล่งที่มาของการไหล

13

SOURCE_RESPONSE

แสดงถึงการเกิดข้อผิดพลาดในแหล่งที่มาของโฟลว์ขณะประมวลผลการตอบสนองที่ประสบความสำเร็จ

ในตัวอย่างข้างต้นคุณจะเห็นส่วนประกอบข้อความของข้อผิดพลาดล่อ

ประเภทข้อผิดพลาด

ให้เราเข้าใจประเภทข้อผิดพลาดด้วยความช่วยเหลือของลักษณะ -

  • ลักษณะแรกของ Mule Error types คือประกอบด้วยทั้งสองอย่าง a namespace and an identifier. สิ่งนี้ช่วยให้เราสามารถแยกแยะประเภทต่างๆตามโดเมนได้ ในตัวอย่างข้างต้นประเภทข้อผิดพลาดคือHTTP: UNAUTHORIZED.

  • ลักษณะที่สองและสำคัญคือประเภทของข้อผิดพลาดอาจมีประเภทหลัก ตัวอย่างเช่นประเภทข้อผิดพลาดHTTP: UNAUTHORIZED มี MULE:CLIENT_SECURITY ในฐานะผู้ปกครองซึ่งในทางกลับกันก็มีชื่อผู้ปกครอง MULE:SECURITY. คุณลักษณะนี้กำหนดประเภทข้อผิดพลาดเป็นข้อกำหนดของรายการส่วนกลางเพิ่มเติม

ชนิดของประเภทข้อผิดพลาด

ต่อไปนี้เป็นหมวดหมู่ที่ข้อผิดพลาดทั้งหมดอยู่ -

ใด ๆ

ข้อผิดพลาดในหมวดหมู่นี้เป็นข้อผิดพลาดที่อาจเกิดขึ้นในโฟลว์ ไม่รุนแรงและสามารถจัดการได้ง่าย

วิกฤต

ข้อผิดพลาดในหมวดหมู่นี้เป็นข้อผิดพลาดร้ายแรงที่ไม่สามารถจัดการได้ ต่อไปนี้เป็นรายการประเภทข้อผิดพลาดในหมวดหมู่นี้ -

ส.น.น. ประเภทข้อผิดพลาดและคำอธิบาย
1

OVERLOAD

ประเภทข้อผิดพลาดนี้ระบุว่ามีข้อผิดพลาดเกิดขึ้นเนื่องจากปัญหาการโอเวอร์โหลด ในกรณีนี้การดำเนินการจะถูกปฏิเสธ

2

FATAL_JVM_ERROR

ประเภทของข้อผิดพลาดนี้บ่งชี้ถึงการเกิดข้อผิดพลาดร้ายแรง ตัวอย่างเช่น stack overflow

ประเภทข้อผิดพลาด CUSTOM

CUSTOM Error types คือข้อผิดพลาดที่กำหนดโดยเรา สามารถกำหนดได้เมื่อทำการแมปหรือเมื่อเพิ่มข้อผิดพลาด เราต้องกำหนดเนมสเปซที่กำหนดเองเฉพาะให้กับประเภทข้อผิดพลาดเหล่านี้เพื่อแยกความแตกต่างจากประเภทข้อผิดพลาดอื่น ๆ ที่มีอยู่ภายในแอปพลิเคชัน Mule ตัวอย่างเช่นในแอปพลิเคชัน Mule โดยใช้ HTTP เราไม่สามารถใช้ HTTP เป็นประเภทข้อผิดพลาดที่กำหนดเองได้

หมวดหมู่ของ Mule Error

ในแง่กว้างข้อผิดพลาดใน Mule สามารถแบ่งออกเป็นสองประเภท ได้แก่ Messaging Errors and System Errors.

ข้อผิดพลาดในการรับส่งข้อความ

ข้อผิดพลาด Mule ประเภทนี้เกี่ยวข้องกับขั้นตอนการล่อ เมื่อใดก็ตามที่เกิดปัญหาขึ้นภายในขั้นตอนของ Mule Mule จะแสดงข้อผิดพลาดในการส่งข้อความ เราสามารถตั้งค่าOn Error ส่วนประกอบภายในคอมโพเนนต์ตัวจัดการข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด Mule เหล่านี้

ระบบผิดพลาด

ข้อผิดพลาดของระบบบ่งชี้ข้อยกเว้นที่เกิดขึ้นที่ระดับระบบ หากไม่มีเหตุการณ์ Mule ข้อผิดพลาดของระบบจะถูกจัดการโดยตัวจัดการข้อผิดพลาดของระบบ ประเภทของข้อยกเว้นต่อไปนี้จัดการโดยตัวจัดการข้อผิดพลาดของระบบ -

  • ข้อยกเว้นที่เกิดขึ้นระหว่างการเริ่มต้นแอปพลิเคชัน
  • ข้อยกเว้นที่เกิดขึ้นเมื่อการเชื่อมต่อกับระบบภายนอกล้มเหลว

ในกรณีที่ระบบเกิดข้อผิดพลาด Mule จะส่งการแจ้งเตือนข้อผิดพลาดไปยังผู้ฟังที่ลงทะเบียนไว้ นอกจากนี้ยังบันทึกข้อผิดพลาด ในทางกลับกัน Mule เรียกใช้กลยุทธ์การเชื่อมต่อใหม่หากข้อผิดพลาดเกิดจากความล้มเหลวในการเชื่อมต่อ

การจัดการข้อผิดพลาดล่อ

Mule มีตัวจัดการข้อผิดพลาดสองตัวต่อไปนี้เพื่อจัดการข้อผิดพลาด -

On-Error Error Handlers

ตัวจัดการข้อผิดพลาด Mule ตัวแรกคือคอมโพเนนต์ On-Error ซึ่งกำหนดประเภทของข้อผิดพลาดที่สามารถจัดการได้ ตามที่กล่าวไว้ก่อนหน้านี้เราสามารถกำหนดค่าคอมโพเนนต์ On-Error ภายในคอมโพเนนต์ตัวจัดการข้อผิดพลาดแบบขอบเขต โฟลว์ Mule แต่ละตัวมีตัวจัดการข้อผิดพลาดเพียงตัวเดียว แต่ตัวจัดการข้อผิดพลาดนี้สามารถมีขอบเขต On-Error ได้มากเท่าที่เราต้องการ ขั้นตอนในการจัดการข้อผิดพลาด Mule ภายในโฟลว์ด้วยความช่วยเหลือของคอมโพเนนต์ On-Error มีดังนี้ -

  • ขั้นแรกเมื่อใดก็ตามที่ Mule flow เกิดข้อผิดพลาดการดำเนินการโฟลว์ปกติจะหยุดลง

  • จากนั้นกระบวนการจะถูกโอนไปยังไฟล์ Error Handler Component ที่มีอยู่แล้ว On Error component เพื่อจับคู่ประเภทข้อผิดพลาดและนิพจน์

  • ในที่สุดคอมโพเนนต์ตัวจัดการข้อผิดพลาดจะกำหนดเส้นทางข้อผิดพลาดไปยังส่วนแรก On Error scope ที่ตรงกับข้อผิดพลาด

ต่อไปนี้เป็นส่วนประกอบ On-Error สองประเภทที่ Mule สนับสนุน -

On-Error Propagate

On-Error Propagate component เรียกทำงาน แต่เผยแพร่ข้อผิดพลาดไปยังระดับถัดไปและหยุดการดำเนินการของเจ้าของ ธุรกรรมจะถูกย้อนกลับหากได้รับการจัดการโดยOn Error Propagate ส่วนประกอบ.

On-Error ดำเนินการต่อ

เช่นเดียวกับคอมโพเนนต์ On-Error Propagate คอมโพเนนต์ On-Error Continue ยังดำเนินธุรกรรม เงื่อนไขเดียวคือถ้าเจ้าของทำการดำเนินการสำเร็จแล้วคอมโพเนนต์นี้จะใช้ผลลัพธ์ของการดำเนินการซึ่งเป็นผลลัพธ์ของเจ้าของ ธุรกรรมจะถูกคอมมิตหากจัดการโดยคอมโพเนนต์ On-Error Continue

ลองใช้ Scope Component

Try Scope เป็นหนึ่งในคุณสมบัติใหม่มากมายที่มีอยู่ใน Mule 4 ซึ่งทำงานคล้ายกับการลองบล็อกของ JAVA ที่เราใช้ในการใส่โค้ดที่มีความเป็นไปได้ที่จะเป็นข้อยกเว้นเพื่อให้สามารถจัดการได้โดยไม่ทำลายโค้ดทั้งหมด

เราสามารถรวมตัวประมวลผลเหตุการณ์ Mule หนึ่งตัวขึ้นไปใน Try Scope และหลังจากนั้นขอบเขตการลองจะจับและจัดการข้อยกเว้นใด ๆ ที่เกิดขึ้นจากตัวประมวลผลเหตุการณ์เหล่านี้ การทำงานหลักของขอบเขตการลองใช้กลยุทธ์การจัดการข้อผิดพลาดของตัวเองซึ่งสนับสนุนการจัดการข้อผิดพลาดในส่วนประกอบภายในแทนการไหลทั้งหมด นั่นคือเหตุผลที่เราไม่จำเป็นต้องแยกกระแสออกเป็นโฟลว์แยก

Example

ต่อไปนี้เป็นตัวอย่างของการใช้ขอบเขตการลอง -

การกำหนดค่าขอบเขตการลองสำหรับการจัดการธุรกรรม

อย่างที่เราทราบกันดีว่าธุรกรรมคือชุดของการดำเนินการที่ไม่ควรดำเนินการบางส่วน การดำเนินการทั้งหมดภายในขอบเขตของธุรกรรมจะดำเนินการในเธรดเดียวกันและหากเกิดข้อผิดพลาดขึ้นควรนำไปสู่การย้อนกลับหรือการคอมมิต เราสามารถกำหนดค่าขอบเขตการลองในลักษณะต่อไปนี้เพื่อให้ถือว่าการดำเนินการย่อยเป็นธุรกรรม

  • INDIFFERENT [Default]- หากเราเลือกการกำหนดค่านี้ใน try block การกระทำของลูกจะไม่ถือเป็นธุรกรรม ในกรณีนี้ข้อผิดพลาดไม่ทำให้เกิดการย้อนกลับหรือคอมมิต

  • ALWAYS_BEGIN - ระบุว่าธุรกรรมใหม่จะเริ่มต้นทุกครั้งที่ดำเนินการขอบเขต

  • BEGIN_OR_JOIN- ระบุว่าหากการประมวลผลปัจจุบันของโฟลว์เริ่มต้นธุรกรรมแล้วให้เข้าร่วม มิฉะนั้นเริ่มต้นใหม่