MuleSoft - Penanganan Error Mule
Penanganan error Mule yang baru adalah salah satu perubahan terbesar dan utama yang dilakukan di Mule 4. Penanganan error baru mungkin tampak rumit, tetapi lebih baik dan lebih efisien. Pada bab ini kita akan membahas tentang komponen kesalahan Mule, Jenis kesalahan, kategori kesalahan Mule dan komponen untuk menangani kesalahan Mule.
Komponen Kesalahan Mule
Kesalahan Mule adalah hasil dari kegagalan pengecualian Mule memiliki komponen berikut -
Deskripsi
Ini adalah komponen penting dari kesalahan Mule yang akan memberikan gambaran tentang masalah tersebut. Ekspresinya adalah sebagai berikut -
#[error.description]
Tipe
Komponen Jenis kesalahan Mule digunakan untuk menandai masalah. Ini juga memungkinkan perutean dalam penangan kesalahan. Ekspresinya adalah sebagai berikut -
#[error.errorType]
Sebab
Komponen Cause dari kesalahan Mule memberikan java yang mendasari throwable yang menyebabkan kegagalan. Ekspresinya adalah sebagai berikut -
#[error.cause]
Pesan
The Pesan komponen kesalahan Mule menunjukkan pesan opsional mengenai kesalahan. Ekspresinya adalah sebagai berikut -
#[error.errorMessage]
Kesalahan Anak
The Kesalahan Anak komponen kesalahan Mule memberikan koleksi opsional kesalahan batin. Kesalahan dalam ini terutama digunakan oleh elemen seperti Scatter-Gather untuk memberikan kesalahan rute gabungan. Ekspresinya adalah sebagai berikut -
#[error.childErrors]
Contoh
Jika terjadi kegagalan permintaan HTTP dengan kode status 401, Kesalahan Mule adalah sebagai berikut -
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 | Jenis dan Deskripsi Kesalahan |
---|---|
1 | TRANSFORMATION Jenis Kesalahan ini menunjukkan kesalahan yang terjadi saat mengubah nilai. Transformasinya adalah transformasi internal Mule Runtime dan bukan transformasi DataWeave. |
2 | EXPRESSION Jenis Kesalahan ini menunjukkan kesalahan yang terjadi saat mengevaluasi ekspresi. |
3 | VALIDATION Jenis Kesalahan ini menunjukkan terjadi kesalahan validasi. |
4 | DUPLICATE_MESSAGE Semacam kesalahan validasi yang terjadi saat pesan diproses dua kali. |
5 | REDELIVERY_EXHAUSTED Jenis Kesalahan ini terjadi ketika upaya maksimum untuk memproses ulang pesan dari sumber telah habis. |
6 | CONNECTIVITY Jenis Kesalahan ini menunjukkan masalah saat membuat koneksi. |
7 | ROUTING Jenis Kesalahan ini menunjukkan kesalahan yang terjadi saat merutekan pesan. |
8 | SECURITY Jenis Kesalahan ini menunjukkan kesalahan keamanan terjadi. Misalnya, kredensial yang diterima tidak valid. |
9 | STREAM_MAXIMUM_SIZE_EXCEEDED Jenis Kesalahan ini terjadi ketika ukuran maksimum yang diizinkan untuk streaming habis. |
10 | TIMEOUT Ini menunjukkan batas waktu saat memproses pesan. |
11 | UNKNOWN Jenis Kesalahan ini menunjukkan terjadi kesalahan yang tidak terduga. |
12 | SOURCE Ini mewakili terjadinya kesalahan di sumber aliran. |
13 | SOURCE_RESPONSE Ini mewakili terjadinya kesalahan di sumber aliran saat memproses respons yang berhasil. |
Dalam contoh di atas, Anda dapat melihat komponen pesan kesalahan bagal.
Jenis Kesalahan
Mari kita pahami Jenis Kesalahan dengan bantuan karakteristiknya -
Karakteristik pertama Jenis Kesalahan Mule adalah terdiri dari keduanya, a namespace and an identifier. Hal ini memudahkan kita untuk membedakan jenis sesuai dengan domainnya. Dalam contoh di atas, Jenis Kesalahan adalahHTTP: UNAUTHORIZED.
Karakteristik kedua dan penting adalah bahwa Jenis Kesalahan mungkin memiliki tipe induk. Misalnya, Jenis KesalahanHTTP: UNAUTHORIZED memiliki MULE:CLIENT_SECURITY sebagai orang tua yang pada gilirannya juga memiliki nama orang tua MULE:SECURITY. Karakteristik ini menetapkan Jenis Kesalahan sebagai spesifikasi item yang lebih global.
Macam Jenis Kesalahan
Berikut adalah kategori di mana semua kesalahan berada -
APA SAJA
Kesalahan di bawah kategori ini adalah kesalahan yang mungkin terjadi di Arus. Mereka tidak terlalu parah dan dapat ditangani dengan mudah.
KRITIS
Kesalahan di bawah kategori ini adalah kesalahan parah yang tidak dapat ditangani. Berikut adalah daftar Jenis Kesalahan di bawah kategori ini -
Sr.NO | Jenis dan Deskripsi Kesalahan |
---|---|
1 | OVERLOAD Jenis Kesalahan ini menunjukkan kesalahan terjadi karena masalah kelebihan muatan. Dalam kasus ini, eksekusi akan ditolak. |
2 | FATAL_JVM_ERROR Jenis Kesalahan ini menunjukkan terjadinya kesalahan fatal. Misalnya, stack overflow. |
Jenis Kesalahan CUSTOM
Jenis Kesalahan CUSTOM adalah kesalahan yang ditentukan oleh kami. Mereka dapat didefinisikan saat memetakan atau saat meningkatkan kesalahan. Kita harus memberikan namespace khusus khusus untuk Jenis Kesalahan ini untuk membedakannya dari Jenis Kesalahan lain yang ada dalam aplikasi Mule. Misalnya pada aplikasi Mule yang menggunakan HTTP, kita tidak bisa menggunakan HTTP sebagai custom error type.
Kategori Kesalahan Mule
Dalam arti luas, kesalahan pada Mule dibedakan menjadi dua kategori yaitu, Messaging Errors and System Errors.
Kesalahan Pesan
Kategori kesalahan Mule ini terkait dengan aliran Mule. Setiap kali terjadi masalah dalam aliran Mule, Mule melontarkan kesalahan pengiriman pesan. Kami dapat mengaturOn Error komponen di dalam komponen penangan kesalahan untuk menangani kesalahan Mule ini.
Sistem bermasalah
Kesalahan sistem menunjukkan pengecualian yang terjadi di tingkat sistem. Jika tidak ada peristiwa Mule, kesalahan sistem akan ditangani oleh penangan kesalahan sistem. Jenis pengecualian berikut ditangani oleh penangan kesalahan sistem -
- Pengecualian yang terjadi selama aplikasi start-up.
- Pengecualian yang terjadi ketika koneksi ke sistem eksternal gagal.
Jika terjadi kesalahan sistem, Mule mengirimkan pemberitahuan kesalahan ke pendengar yang terdaftar. Itu juga mencatat kesalahan. Di sisi lain, Mule menjalankan strategi koneksi ulang jika kesalahan disebabkan oleh kegagalan koneksi.
Menangani Kesalahan Mule
Mule mengikuti dua Penangan Kesalahan untuk menangani kesalahan -
Penangan Kesalahan Saat Terjadi Kesalahan
Penangan kesalahan Mule pertama adalah komponen On-Error, yang mendefinisikan jenis kesalahan yang dapat mereka tangani. Seperti yang telah dibahas sebelumnya, kita dapat mengonfigurasi komponen On-Error di dalam komponen Penangan Kesalahan yang mirip lingkup. Setiap aliran Mule hanya berisi satu penangan kesalahan, tetapi penangan kesalahan ini dapat berisi lingkup On-Error sebanyak yang kami butuhkan. Langkah-langkah untuk menangani kesalahan Mule di dalam aliran, dengan bantuan komponen On-Error, adalah sebagai berikut -
Pertama, setiap kali aliran Mule menimbulkan kesalahan, eksekusi aliran normal berhenti.
Selanjutnya, proses tersebut akan ditransfer ke Error Handler Component yang sudah punya On Error component untuk mencocokkan jenis dan ekspresi kesalahan.
Terakhir, komponen Error Handler merutekan kesalahan ke yang pertama On Error scope yang cocok dengan kesalahan tersebut.
Berikut adalah dua jenis komponen On-Error yang didukung oleh Mule -
Penyebaran Saat Terjadi Kesalahan
Komponen On-Error Propagate mengeksekusi tetapi menyebarkan kesalahan ke tingkat berikutnya dan menghentikan eksekusi pemilik. Transaksi akan dibatalkan jika ditangani olehOn Error Propagate komponen.
On-Error Continue
Seperti komponen On-Error Propagate, komponen On-Error Continue juga menjalankan transaksi. Satu-satunya syarat adalah, jika pemilik berhasil menyelesaikan eksekusi maka komponen ini akan menggunakan hasil eksekusi sebagai hasil dari pemiliknya. Transaksi akan dilakukan jika ditangani oleh komponen On-Error Continue.
Coba Scope Component
Try Scope adalah salah satu dari banyak fitur baru yang tersedia di Mule 4. Cara kerjanya mirip dengan mencoba blok JAVA di mana kami biasa menyertakan kode yang memiliki kemungkinan menjadi pengecualian, sehingga dapat ditangani tanpa merusak seluruh kode.
Kita dapat membungkus satu atau lebih pemroses acara Mule dalam Lingkup Coba dan setelah itu, lingkup percobaan akan menangkap dan menangani pengecualian apa pun yang dilemparkan oleh pemroses acara ini. Pekerjaan utama lingkup percobaan berkisar pada strategi penanganan kesalahannya sendiri yang mendukung penanganan kesalahan pada komponen dalamnya, bukan keseluruhan aliran. Itulah mengapa kita tidak perlu mengekstraksi aliran ke aliran terpisah.
Example
Berikut adalah contoh penggunaan lingkup percobaan -
Mengonfigurasi lingkup percobaan untuk menangani transaksi
Seperti kita ketahui, transaksi merupakan rangkaian tindakan yang tidak boleh dilakukan secara parsial. Semua operasi dalam lingkup transaksi dijalankan di utas yang sama dan jika terjadi kesalahan, itu harus mengarah ke rollback atau komit. Kita dapat mengkonfigurasi lingkup percobaan, dengan cara berikut, sehingga memperlakukan operasi anak sebagai transaksi.
INDIFFERENT [Default]- Jika kita memilih konfigurasi ini pada blok percobaan, maka tindakan anak tidak akan diperlakukan sebagai transaksi. Dalam kasus ini, kesalahan tidak menyebabkan rollback atau pun melakukan.
ALWAYS_BEGIN - Ini menunjukkan bahwa transaksi baru akan dimulai setiap kali ruang lingkup dijalankan.
BEGIN_OR_JOIN- Ini menunjukkan bahwa jika pemrosesan arus saat ini sudah memulai transaksi, bergabunglah dengannya. Jika tidak, mulailah yang baru.