MuleSoft - Manejo de errores de Mule
El nuevo manejo de errores de Mule es uno de los cambios más grandes e importantes realizados en Mule 4. El nuevo manejo de errores puede parecer complejo, pero es mejor y más eficiente. En este capítulo, analizaremos los componentes del error Mule, los tipos de error, las categorías de error Mule y los componentes para el manejo de errores Mule.
Componentes de Mule Error
El error de Mule es el resultado de una excepción de Mule que tiene los siguientes componentes:
Descripción
Es un componente importante del error Mule que dará una descripción sobre el problema. Su expresión es la siguiente:
#[error.description]
Tipo
El componente de tipo del error Mule se utiliza para caracterizar el problema. También permite el enrutamiento dentro de un controlador de errores. Su expresión es la siguiente:
#[error.errorType]
Porque
El componente Cause del error Mule da el Java subyacente que se puede lanzar que causa el error. Su expresión es la siguiente:
#[error.cause]
Mensaje
El componente Mensaje del error Mule muestra un mensaje opcional con respecto al error. Su expresión es la siguiente:
#[error.errorMessage]
Errores del niño
El Errores infantiles componente de error de mula da una colección opcional de errores internos. Estos errores internos son utilizados principalmente por elementos como Scatter-Gather para proporcionar errores de ruta agregados. Su expresión es la siguiente:
#[error.childErrors]
Ejemplo
En caso de falla de la solicitud HTTP con un código de estado 401, los errores de Mule son los siguientes:
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." }
No Señor | Tipo de error y descripción |
---|---|
1 | TRANSFORMATION Este tipo de error indica que se produjo un error al transformar un valor. La transformación es la transformación interna de Mule Runtime y no las transformaciones de DataWeave. |
2 | EXPRESSION Este tipo de tipo de error indica que se produjo un error al evaluar una expresión. |
3 | VALIDATION Este tipo de tipo de error indica que ocurrió un error de validación. |
4 | DUPLICATE_MESSAGE Una especie de error de validación que se produce cuando un mensaje se procesa dos veces. |
5 | REDELIVERY_EXHAUSTED Este tipo de tipo de error se produce cuando se han agotado los intentos máximos de reprocesar un mensaje de una fuente. |
6 | CONNECTIVITY Este tipo de error indica un problema al establecer una conexión. |
7 | ROUTING Este tipo de error indica que ocurrió un error al enrutar un mensaje. |
8 | SECURITY Este tipo de error indica que ocurrió un error de seguridad. Por ejemplo, se recibieron credenciales no válidas. |
9 | STREAM_MAXIMUM_SIZE_EXCEEDED Este tipo de error se produce cuando se agota el tamaño máximo permitido para una secuencia. |
10 | TIMEOUT Indica el tiempo de espera mientras se procesa un mensaje. |
11 | UNKNOWN Este tipo de error indica que ocurrió un error inesperado. |
12 | SOURCE Representa la ocurrencia de un error en la fuente del flujo. |
13 | SOURCE_RESPONSE Representa la ocurrencia de un error en la fuente del flujo mientras se procesa una respuesta exitosa. |
En el ejemplo anterior, puede ver el componente de mensaje de error de mula.
Tipos de error
Entendamos los tipos de error con la ayuda de sus características:
La primera característica de los tipos de error de mula es que consta de ambos, a namespace and an identifier. Esto nos permite distinguir los tipos según su dominio. En el ejemplo anterior, el tipo de error esHTTP: UNAUTHORIZED.
La segunda e importante característica es que el tipo de error puede tener un tipo principal. Por ejemplo, el tipo de errorHTTP: UNAUTHORIZED tiene MULE:CLIENT_SECURITY como el padre que a su vez también tiene un padre llamado MULE:SECURITY. Esta característica establece el tipo de error como especificación de un elemento más global.
Tipos de tipos de error
A continuación se muestran las categorías en las que se encuentran todos los errores:
NINGUNA
Los errores de esta categoría son los errores que pueden ocurrir en un flujo. No son tan graves y se pueden manejar fácilmente.
CRÍTICO
Los errores de esta categoría son los errores graves que no se pueden manejar. A continuación se muestra la lista de tipos de error en esta categoría:
No Señor | Tipo de error y descripción |
---|---|
1 | OVERLOAD Este tipo de error indica que ocurrió un error debido a un problema de sobrecarga. En este caso, la ejecución será rechazada. |
2 | FATAL_JVM_ERROR Este tipo de tipo de error indica la ocurrencia de un error fatal. Por ejemplo, desbordamiento de pila. |
Tipo de error PERSONALIZADO
Los tipos de error PERSONALIZADOS son los errores que definimos nosotros. Se pueden definir al mapear o al plantear los errores. Debemos dar un espacio de nombres personalizado específico a estos tipos de error para distinguirlos de los otros tipos de error existentes dentro de la aplicación Mule. Por ejemplo, en la aplicación Mule que usa HTTP, no podemos usar HTTP como el tipo de error personalizado.
Categorías de error de mula
En sentido amplio, los errores en Mule se pueden dividir en dos categorías, a saber, Messaging Errors and System Errors.
Error de mensajería
Esta categoría de error de Mulas está relacionada con el flujo de Mulas. Siempre que ocurre un problema dentro de un flujo de Mule, Mule lanza un mensaje de error. Podemos configurarOn Error componente dentro del componente controlador de errores para manejar estos errores de Mule.
Error del sistema
El error del sistema indica que se produce una excepción a nivel del sistema. Si no hay un evento Mule, el error del sistema lo maneja un controlador de errores del sistema. El siguiente tipo de excepciones manejadas por un controlador de errores del sistema:
- Excepción que ocurre durante el inicio de una aplicación.
- Excepción que ocurre cuando falla una conexión a un sistema externo.
En caso de que ocurra un error del sistema, Mule envía una notificación de error a los oyentes registrados. También registra el error. Por otro lado, Mule ejecuta una estrategia de reconexión si el error fue causado por una falla en la conexión.
Manejo de errores de mula
Mule tiene los siguientes dos controladores de errores para manejar los errores:
Controladores de errores en caso de error
El primer controlador de errores de Mule es el componente On-Error, que define los tipos de errores que pueden manejar. Como se discutió anteriormente, podemos configurar componentes en caso de error dentro del componente de controlador de errores similar al alcance. Cada flujo de Mule contiene solo un manejador de errores, pero este manejador de errores puede contener tantos alcances en caso de error como necesitemos. Los pasos para manejar el error Mule dentro del flujo, con la ayuda del componente On-Error, son los siguientes:
Primero, cada vez que un flujo de Mule genera un error, la ejecución normal del flujo se detiene.
A continuación, el proceso se transferirá al Error Handler Component que ya tengo On Error component para hacer coincidir los tipos de error y las expresiones.
Por fin, el componente Manejador de errores enruta el error al primer On Error scope que coincide con el error.
A continuación se muestran los dos tipos de componentes en caso de error admitidos por Mule:
Propagación en caso de error
El componente de propagación en caso de error se ejecuta pero propaga el error al siguiente nivel e interrumpe la ejecución del propietario. La transacción se revertirá si la gestionaOn Error Propagate componente.
Continuar en caso de error
Al igual que el componente Propagar en caso de error, el componente Continuar en caso de error también ejecuta la transacción. La única condición es que, si el propietario completó la ejecución con éxito, este componente utilizará el resultado de la ejecución como el resultado de su propietario. La transacción se confirmará si es manejada por el componente Continuar en caso de error.
Pruebe el componente Scope
Try Scope es una de las muchas características nuevas disponibles en Mule 4. Funciona de manera similar al bloque try de JAVA en el que solíamos encerrar el código teniendo la posibilidad de ser una excepción, para que se pueda manejar sin romper todo el código.
Podemos envolver uno o más procesadores de eventos Mule en Try Scope y luego, try scope detectará y manejará cualquier excepción lanzada por estos procesadores de eventos. El funcionamiento principal del alcance de prueba gira en torno a su propia estrategia de manejo de errores que admite el manejo de errores en su componente interno en lugar de todo el flujo. Es por eso que no necesitamos extraer el flujo en un flujo separado.
Example
A continuación se muestra un ejemplo del uso del alcance de prueba:
Configurar el alcance de prueba para manejar transacciones
Como sabemos, una transacción es una serie de acciones que nunca deben ejecutarse parcialmente. Todas las operaciones dentro del alcance de una transacción se ejecutan en el mismo hilo y si ocurre un error, debería conducir a una reversión o un compromiso. Podemos configurar el alcance de prueba, de la siguiente manera, para que trate las operaciones secundarias como una transacción.
INDIFFERENT [Default]- Si elegimos esta configuración en el bloque try, las acciones secundarias no se tratarán como una transacción. En este caso, el error no provoca la reversión ni la confirmación.
ALWAYS_BEGIN - Indica que se iniciará una nueva transacción cada vez que se ejecute el alcance.
BEGIN_OR_JOIN- Indica que si el procesamiento actual del flujo ya ha iniciado una transacción, únete a ella. De lo contrario, inicie uno nuevo.