MuleSoft - Xử lý lỗi Mule
Xử lý lỗi Mule mới là một trong những thay đổi lớn nhất và chính được thực hiện trong Mule 4. Việc xử lý lỗi mới có vẻ phức tạp, nhưng tốt hơn và hiệu quả hơn. Trong chương này, chúng ta sẽ thảo luận về các thành phần của lỗi Mule, các loại lỗi, các loại lỗi Mule và các thành phần để xử lý lỗi Mule.
Các thành phần của lỗi Mule
Lỗi Mule là kết quả của lỗi ngoại lệ Mule có các thành phần sau:
Sự miêu tả
Đây là một thành phần quan trọng của lỗi Mule sẽ đưa ra mô tả về sự cố. Biểu thức của nó như sau:
#[error.description]
Kiểu
Thành phần Loại của lỗi Mule được sử dụng để mô tả vấn đề. Nó cũng cho phép định tuyến trong một trình xử lý lỗi. Biểu thức của nó như sau:
#[error.errorType]
Nguyên nhân
Thành phần Nguyên nhân của lỗi Mule cung cấp tệp java cơ bản gây ra lỗi. Biểu thức của nó như sau:
#[error.cause]
Thông điệp
Thành phần Thông báo của lỗi Mule hiển thị một thông báo tùy chọn liên quan đến lỗi. Biểu thức của nó như sau:
#[error.errorMessage]
Lỗi trẻ em
Thành phần Lỗi con của lỗi Mule cung cấp một tập hợp các lỗi bên trong tùy chọn. Các lỗi bên trong này chủ yếu được sử dụng bởi các phần tử như Scatter-Gather để cung cấp các lỗi tuyến tổng hợp. Biểu thức của nó như sau:
#[error.childErrors]
Thí dụ
Trong trường hợp yêu cầu HTTP không thành công với mã trạng thái 401, lỗi Mule như sau:
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." }
Sr.NO | Loại lỗi và mô tả |
---|---|
1 | TRANSFORMATION Loại Lỗi này cho biết đã xảy ra lỗi khi chuyển đổi giá trị. Phép biến đổi là phép biến đổi bên trong Mule Runtime chứ không phải phép biến đổi DataWeave. |
2 | EXPRESSION Loại Loại Lỗi này chỉ ra một lỗi đã xảy ra khi đánh giá một biểu thức. |
3 | VALIDATION Loại Loại lỗi này cho biết đã xảy ra lỗi xác thực. |
4 | DUPLICATE_MESSAGE Một loại lỗi xác thực xảy ra khi một thông báo được xử lý hai lần. |
5 | REDELIVERY_EXHAUSTED Loại Loại Lỗi này xảy ra khi các nỗ lực tối đa để xử lý lại thư từ một nguồn đã hết. |
6 | CONNECTIVITY Loại Lỗi này cho biết sự cố khi thiết lập kết nối. |
7 | ROUTING Loại Lỗi này cho biết đã xảy ra lỗi khi định tuyến thư. |
số 8 | SECURITY Loại Lỗi này cho biết đã xảy ra lỗi bảo mật. Ví dụ: nhận được thông tin đăng nhập không hợp lệ. |
9 | STREAM_MAXIMUM_SIZE_EXCEEDED Loại Lỗi này xảy ra khi kích thước tối đa được phép cho một luồng cạn kiệt. |
10 | TIMEOUT Nó cho biết thời gian chờ trong khi xử lý một tin nhắn. |
11 | UNKNOWN Loại Lỗi này cho biết đã xảy ra lỗi không mong muốn. |
12 | SOURCE Nó đại diện cho sự xuất hiện của một lỗi trong nguồn của luồng. |
13 | SOURCE_RESPONSE Nó đại diện cho sự xuất hiện của một lỗi trong nguồn của luồng trong khi xử lý một phản hồi thành công. |
Trong ví dụ trên, bạn có thể thấy thành phần thông báo của lỗi con la.
Các loại lỗi
Hãy để chúng tôi hiểu Các loại lỗi với sự trợ giúp của các đặc điểm của nó -
Đặc điểm đầu tiên của các loại lỗi Mule là nó bao gồm cả hai, a namespace and an identifier. Điều này cho phép chúng tôi phân biệt các loại theo miền của chúng. Trong ví dụ trên, Loại lỗi làHTTP: UNAUTHORIZED.
Đặc điểm thứ hai và quan trọng là Kiểu lỗi có thể có kiểu mẹ. Ví dụ: Loại lỗiHTTP: UNAUTHORIZED có MULE:CLIENT_SECURITY như cha mẹ, đến lượt nó cũng có cha mẹ có tên MULE:SECURITY. Đặc tính này thiết lập Loại lỗi như là đặc điểm kỹ thuật của nhiều mặt hàng toàn cầu hơn.
Các loại lỗi
Sau đây là các danh mục mà tất cả các lỗi thuộc về -
BẤT KÌ
Các lỗi trong danh mục này là các lỗi có thể xảy ra trong Luồng. Chúng không quá nghiêm trọng và có thể được xử lý dễ dàng.
BẠO KÍCH
Những lỗi thuộc danh mục này là những lỗi nặng không thể xử lý được. Sau đây là danh sách Các loại lỗi trong danh mục này:
Sr.NO | Loại lỗi và mô tả |
---|---|
1 | OVERLOAD Loại Lỗi này cho biết lỗi đã xảy ra do sự cố quá tải. Trong trường hợp này, việc thực thi sẽ bị từ chối. |
2 | FATAL_JVM_ERROR Loại Lỗi Loại này cho biết sự xuất hiện của một lỗi nghiêm trọng. Ví dụ, tràn ngăn xếp. |
Loại lỗi CUSTOM
Các loại lỗi TÙY CHỈNH là các lỗi do chúng tôi xác định. Chúng có thể được xác định khi ánh xạ hoặc khi nâng cao lỗi. Chúng tôi phải cung cấp một không gian tên tùy chỉnh cụ thể cho các Loại lỗi này để phân biệt chúng với các Loại lỗi hiện có khác trong ứng dụng Mule. Ví dụ: trong ứng dụng Mule sử dụng HTTP, chúng tôi không thể sử dụng HTTP làm loại lỗi tùy chỉnh.
Các loại lỗi Mule
Theo nghĩa rộng, lỗi trong Mule có thể được chia thành hai loại, cụ thể là, Messaging Errors and System Errors.
Lỗi nhắn tin
Loại lỗi Mule này có liên quan đến dòng Mule. Bất cứ khi nào có sự cố xảy ra trong luồng Mule, Mule sẽ đưa ra một lỗi nhắn tin. Chúng tôi có thể thiết lậpOn Error thành phần bên trong thành phần xử lý lỗi để xử lý các lỗi Mule này.
Lỗi hệ thống
Lỗi hệ thống chỉ ra một ngoại lệ xảy ra ở cấp hệ thống. Nếu không có sự kiện Mule, lỗi hệ thống được xử lý bởi trình xử lý lỗi hệ thống. Loại ngoại lệ sau do trình xử lý lỗi hệ thống xử lý:
- Ngoại lệ xảy ra trong quá trình khởi động ứng dụng.
- Ngoại lệ xảy ra khi kết nối với hệ thống bên ngoài không thành công.
Trong trường hợp xảy ra lỗi hệ thống, Mule sẽ gửi thông báo lỗi đến những người nghe đã đăng ký. Nó cũng ghi lại lỗi. Mặt khác, Mule thực hiện chiến lược kết nối lại nếu lỗi do lỗi kết nối.
Xử lý lỗi Mule
Mule có hai Trình xử lý lỗi sau để xử lý các lỗi:
Trình xử lý lỗi On-Error
Trình xử lý lỗi Mule đầu tiên là thành phần On-Error, xác định các loại lỗi mà chúng có thể xử lý. Như đã thảo luận trước đó, chúng ta có thể định cấu hình các thành phần On-Error bên trong thành phần Error Handler giống như phạm vi. Mỗi luồng Mule chỉ chứa một trình xử lý lỗi, nhưng trình xử lý lỗi này có thể chứa nhiều phạm vi On-Error nếu chúng tôi cần. Các bước để xử lý lỗi Mule bên trong luồng, với sự trợ giúp của thành phần On-Error, như sau:
Đầu tiên, bất cứ khi nào luồng Mule xảy ra lỗi, việc thực thi luồng bình thường sẽ dừng lại.
Tiếp theo, quy trình sẽ được chuyển sang Error Handler Component đã có On Error component để phù hợp với các loại lỗi và biểu thức.
Cuối cùng, thành phần xử lý lỗi định tuyến lỗi đến đầu tiên On Error scope phù hợp với lỗi.
Sau đây là hai loại thành phần On-Error được Mule hỗ trợ:
Tuyên truyền lỗi
Thành phần On-Error Tuyên truyền thực thi nhưng truyền lỗi đến cấp độ tiếp theo và phá vỡ quá trình thực thi của chủ sở hữu. Giao dịch sẽ được hoàn nguyên nếu nó được xử lý bởiOn Error Propagate thành phần.
Tiếp tục về Lỗi
Giống như thành phần On-Error Tuyên truyền, thành phần On-Error Continue cũng thực hiện giao dịch. Điều kiện duy nhất là, nếu chủ sở hữu đã hoàn thành việc thực thi thành công thì thành phần này sẽ sử dụng kết quả của việc thực thi như kết quả của chủ sở hữu của nó. Giao dịch sẽ được cam kết nếu nó được xử lý bởi thành phần On-Error Continue.
Thử thành phần phạm vi
Thử Phạm vi là một trong nhiều tính năng mới có trong Mule 4. Nó hoạt động tương tự như thử khối JAVA mà chúng tôi đã sử dụng để bao gồm mã có khả năng là một ngoại lệ, để nó có thể được xử lý mà không làm hỏng toàn bộ mã.
Chúng ta có thể bao bọc một hoặc nhiều bộ xử lý sự kiện Mule trong Thử Phạm vi và sau đó, phạm vi thử sẽ bắt và xử lý bất kỳ ngoại lệ nào do các bộ xử lý sự kiện này ném ra. Hoạt động chính của try scope xoay quanh chiến lược xử lý lỗi của riêng nó, hỗ trợ xử lý lỗi trên thành phần bên trong của nó thay vì toàn bộ luồng. Đó là lý do tại sao chúng ta không cần trích dòng chảy thành một dòng chảy riêng.
Example
Sau đây là một ví dụ về việc sử dụng phạm vi thử:
Định cấu hình phạm vi thử để xử lý các giao dịch
Như chúng ta đã biết, giao dịch là một chuỗi các hành động không bao giờ được thực hiện từng phần. Tất cả các hoạt động trong phạm vi của một giao dịch được thực hiện trong cùng một chuỗi và nếu xảy ra lỗi, nó sẽ dẫn đến việc khôi phục hoặc cam kết. Chúng ta có thể định cấu hình phạm vi thử theo cách sau để nó coi các hoạt động con như một giao dịch.
INDIFFERENT [Default]- Nếu chúng ta chọn cấu hình này trên khối try, thì các hành động con sẽ không được coi là một giao dịch. Trong trường hợp này, lỗi không gây ra việc khôi phục và cam kết.
ALWAYS_BEGIN - Nó chỉ ra rằng một giao dịch mới sẽ được bắt đầu mỗi khi phạm vi được thực hiện.
BEGIN_OR_JOIN- Nó chỉ ra rằng nếu quá trình xử lý hiện tại của luồng đã bắt đầu một giao dịch, hãy tham gia nó. Nếu không, hãy bắt đầu một cái mới.