Saltar al contenido

Procesamiento de mensajes nuevamente en caso de error

En el capítulo anterior, simplemente entendimos el envío de un error por correo y esperábamos que el remitente volviera a enviar el mensaje en caso de error.

Hay casos en los que el error es temporal y el procesamiento suele tener éxito después de un tiempo, como un punto final que no está disponible temporalmente. En ese caso, el mensaje solo debe reprocesarse a medida que se realiza y el procesamiento se realiza correctamente.

Hay otros casos en los que el error se debe a datos incorrectos o URL incorrectas. Ninguna cantidad de recuperaciones puede ayudar a procesar el mensaje con éxito sin cambiar los datos incorrectos.

Un mecanismo de nuevo juicio automático solo será útil en el primer caso.

En este capítulo, modelaremos un mecanismo de nuevo juicio automático.

Para habilitar el reintento, almacenaremos el mensaje fallido en una cola JMS y lo seleccionaremos repetidamente para reintentar el procesamiento, hasta que se procese correctamente. Para lograr esto, seguiremos los siguientes pasos:

  1. Aparcaremos los datos entrantes en una propiedad.

  2. En caso de una excepción, escribiremos el mensaje de la propiedad en la cola JMS en el subproceso de excepción.

  3. Cree un flujo duplicado que lea de la cola y procese un mensaje. Si la excepción se repite, el mensaje no se eliminará de la cola. En consecuencia, se recuperará varias veces hasta que se procese con éxito o se coloque en el Cola de mensajes fallidos.


Paso 1: estaciona un mensaje en una propiedad

  1. Poner un Modificador de contenido justo después del Iniciar evento:
    • Haga clic en la paleta de diseño.
    • Escoger Transformadores de mensajes.
    • Haga clic en Modificador de contenido.
    • Arrástrelo a la canalización de ejecución de mensajes entre Evento de mensaje inicial y el Enriquecedor de contenido la licenciatura.

    Arrastrar modificador de contenido

    • Cambiar el nombre del Modificador de contenido – clickea en el Modificador de contenido paso, ve al Hoja de propiedades -> General pestaña
      Selecciona el Nombre a Mensaje en el parque.

    • Vamos Propiedad de intercambio pestaña, haga clic en Agregar e ingrese los siguientes detalles:

    GortValor
    AcciónCrear
    NombreAporte
    Mas o menosSlonn
    Tipo de datosjava.lang.String
    Valor$ {in.body}
    Defecto

    Entrada de campo

Hecho

Inicie sesión para responder la pregunta

Paso 2: escriba un mensaje entrante en la cola JMS para las excepciones

En este paso, asumimos que se ha producido una excepción. Ahora almacenaremos el mensaje entrante en la cola JMS. Con este fin, no podemos poner el mensaje en la canalización porque nunca podemos estar seguros de dónde puede ocurrir una excepción. Entonces, tenemos que usar el mensaje que estacionamos en el paso anterior; de esta manera, siempre estamos seguros de que estamos trabajando en el mensaje entrante y de que podemos replicar todo el procesamiento a medida que lo volvemos a intentar.

  1. Cargue el mensaje inicial de la propiedad en el cuerpo cuando ocurra una excepción:

    • Haga clic en la paleta de diseño.
    • Escoger Transformadores de mensajes.
    • Haga clic en Modificador de contenido.

    Seleccionar modificador de contenido

    • Arrástrelo al subproceso de excepción, justo después del Evento de error inicial.

    • Clickea en el Modificador de contenido, vaya a la hoja de propiedades y cámbiele el nombre a Lleva un mensaje al cuerpo.

    Restablecer cambiador de contenido 2

    • Ve a la Cuerpo pestaña y seleccione lo siguiente:
    GortValor
    Mas o menosSlonn
    Cuerpo$ {property.Input}

    Asignar entrada

  2. Agregue un receptor JMS en el subproceso de excepción.

    • Haga clic en la paleta de diseño.
    • Escoger Llamada.
    • Escoger Llamada externa.
    • Haga clic en Enviar.

    Seleccione RequestReply

    • Arrástrelo al subproceso de excepción, justo después del Modificador de contenido.

    Agregar RequestReply

    • Haga clic en la paleta de diseño.
    • Escoger Partícipe.
    • Escoger Receptor.

    Seleccionar receptor

    • Arrastre el receptor debajo del Pide una respuesta paso como se muestra a continuación:

    Dibujar un receptor

    • Haga clic en el receptor, vaya a la hoja de propiedades y cambie el nombre del receptor a JMSQueue.

    Cambiar nombre de receptor

    • Repasar el Pide una respuesta grado de uso del Conector para conectarlo a la JMSQueue receptor. Seleccione JMS en la ventana emergente.

    Conector JMS

  3. Configure el conector JMS:

    Agregue la siguiente configuración al receptor JMS en el Procesando pestaña:

    GortValor
    Nombre de la colaAporte
    Umbral de retención de alerta (en d)2
    Periodo de vencimiento (en d)90
    Cifrar mensaje almacenadoComprobado
    Transferir propiedades de ExchangeSin revisar

Hecho

Inicie sesión para responder la pregunta

Paso 3: guardar, implementar y ejecutar el flujo original

  1. Guarde e implemente el flujo de integración:

    Guardar el flujo de implementación 1

    Una vez que haya implementado el flujo, se creará una cola y esto se puede ver en el Monitor de cola:

    Ve a la Ver operaciones -> Administrar tienda sección y haga clic en Administrar colas:

    Echa un vistazo a la cola abierta

    Como puede ver, se crea una cola. El nombre de la cola es Aporte – Igual que se configuró en el receptor JMS.

    Echa un vistazo a la cola

    Actualmente no hay detalles en la cola.

    Ejecutemos el flujo ahora para escribir un mensaje en esta cola.

  2. Ejecute el flujo de integración y vuelva a comprobar la escena de la cola:

    Echa un vistazo a la cola

    Ahora vemos una entrada en la cola.

  3. Verifique la bandeja de entrada configurada. Todavía no debería haber recibido ningún correo electrónico. Esto sugiere que el flujo no completó el procesamiento.

    Ahora, creemos la lógica del reintento.

Hecho

Inicie sesión para responder la pregunta

Paso 4: crear un flujo duplicado para leer mensajes de una cola JMS

En este ejercicio, copiaremos el flujo original y le realizaremos los siguientes cambios:

  • Reemplace el remitente JMS con el remitente SOAP: esto es así, ahora queremos que el flujo de integración de la cola JMS sondee, sin revelar el punto final de SOAP. Este flujo sondeará la cola después de intervalos regulares, según lo configurado en el canal JMS en el próximo ejercicio. Todos los mensajes enviados a la cola a través de la subrutina original del flujo original se suspenderán como resultado del proceso anterior.

  • El subproceso de excepción se eliminará; esto sucede porque se elimina una entrada de la cola. En caso de una excepción, la entrada se volverá a escribir en la cola (o no se eliminará). Esto asegurará que se cerrará y se colocará en la cola de mensajes no entregados más adelante en caso de que el proceso no se procese correctamente en el número configurado de referencias.

  • El script de inducción excepcional debe eliminarse; esto asegura que cuando el mensaje se suspende, la excepción no se simula y, por lo tanto, deberíamos poder procesar con éxito el mensaje en la primera iteración.

  1. Copie el flujo de integración:

    • Vaya a la vista Paquete de integración:

    Ver paquete

    • Haga clic en Editar. Vamos Comportamiento para el flujo de integración Gestionar la logística de carga y seleccione Dupdo:

    Copiar flujo

    • En el cuadro de diálogo emergente, ingrese Manage Freight Logistics_retry como el nombre del nuevo flujo de integración:

    Flujo de nombre

    Hacer clic Dupdo.

    El flujo de integración correspondiente se agrega al paquete de integración:

    Flujo agregado

  2. Edite el flujo de nuevo juicio:

    1. Abra el flujo de reintento y haga clic en Editar:

      Editar flujo

    2. Eliminar el canal SOAP del remitente:

      Haga clic en el canal y haga clic en el eliminado botón de velocidad:

      Eliminar SOAP

    3. Coloca el cursor sobre el Proveedor de comercio electrónico conductor, use el botón de velocidad para Conector y conecte el conductor a la Evento de mensaje inicial:

      Agregar JMS

    4. Eliminar etapa de secuencia de comandos: coloque el cursor sobre el Texto paso y seleccione el botón de velocidad para eliminar:

      Eliminar secuencia de comandos

    5. Elimine el subproceso de excepción: elimine lo siguiente:

      Subproceso de eliminación de excepciones

      • Exception Subprocess 1
      • JMSQueue
      • Receiver 1

    El flujo de integración final se parece a la siguiente imagen:

    Nuevo flujo

Hecho

Inicie sesión para responder la pregunta

Paso 5: configurar el sitio de reintento en la cola JMS

Configure el remitente JMS de la siguiente manera:

GortValorSuelte
Nombre de la colaAporteNombre de la cola a leer
Número de procesos paralelos1Cuántos procesos simultáneos deben leerse de la cola
Intervalo de recuperación (en minutos)1Después de cuántos minutos se debe sondear el proceso de cola
Copia de seguridad exponencialComprobadoCuando esta casilla de verificación está marcada, el intervalo de reintento se duplica después de cada reintento. Esto asegura que, en el caso de un problema que no se resuelva rápidamente, el nuevo juicio no suponga una carga para el sistema.
Intervalo de reintento máximo (mínimo)60Cuál es el intervalo máximo que no debe repetirse. Esto solo es relevante cuando se selecciona una copia de seguridad exponencial
Cola de mensajes fallidosComprobadoEsto se usa para colocar entradas fallidas después de 2 reanudaciones en una cola separada, conocida como cola de mensajes no entregados

Hecho

Inicie sesión para responder la pregunta

Paso 6: imagina y ejecuta un reintento

  1. Guarde e implemente el flujo de integración de un nuevo juicio:

    Guardar el flujo de implementación

    Una vez que se utiliza el flujo, comienza a votar en la cola de mensajes. Como resultado, el mensaje de la cola ahora debería recogerse en el flujo de reintento de integración y procesarse.

  2. Verifique la vista de la cola: ahora que el mensaje está seleccionado, no deberíamos ver ningún mensaje en la cola:

    Echa un vistazo a la cola 2

  3. Dado que no generaremos una excepción en el flujo de reintento, esta vez el flujo se ejecutará correctamente y debería recibir un correo electrónico en la bandeja de entrada configurada.

    Correo electrónico recibido