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.