Bulk Acciones de Tarea

Bulk

Si la misma acción debe ejecutarse en varias tareas, puede ejecutarse como un 'bulk' de tareas. En el HTM contexto, a bulk se refiere a una 'colección' de tareas. La bulk contiene una lista de identificadores de tarea y un conjunto de datos requeridos para un cierto tipo de acción.

Acciones soportadas

Soportado bulk las acciones son:

Este bulk La acción combina dos acciones de tarea única separadas: Asignar y Ejecutar. Para cada taskId proporcionado en los datos de entrada, se realiza la acción de Asignar tarea, luego para cada taskId se realiza la acción de Ejecutar tarea.

Por ejemplo, si los datos de entrada contienen identificadores de tarea: [taskId1, taskId2], se realizarán las siguientes acciones de tarea única:

  • Tarea Asignar en la tarea task Id1

  • Tarea Asignar en la tarea task Id2

  • Ejecutar la tarea task Id1

  • Tarea Ejecute la tarea task Id2

Activando esto bulk la acción se realiza a través de HTTP Solicitud POST /bulk-tareas/asignar-y-ejecutar. Para más detalles consulte API sección.

Además de validar los parámetros de solicitud requeridos, se implementan las siguientes validaciones:

  • Máximo permitido bulk tamaño-número máximo de tareas en un bulk es configurable a través de la propiedad ipf.htm.bulk.max-size y por defecto está configurado en 1000 tareas por bulk. Si el bulk contiene más tareas de las permitidas, se devolverá el siguiente error:

{
    "code": "400",
    "message": "Maximum bulk size exceeded",
    "description": "Current bulk size 2000 exceeded maximum allowed bulk size 1000.",
    "instance": "/bulk-tasks/assign-and-execute"
}
  • No se requieren aprobaciones-solo se pueden procesar tareas sin aprobaciones requeridas en el bulk. Si al menos una de las tareas de la bulk tiene aprobaciones requeridas > 0, el bulk no será procesado y se devolverá el siguiente error:

{
    "code": "400",
    "message": "Required approvals are not allowed for bulk task action",
    "description": "Required approvals are not allowed for bulk task action, but the bulk contains 2 tasks with required approvals greater than 0.",
    "instance": "/bulk-tasks/assign-and-execute"
}
  • Mismo tipo-todas las tareas deben tener el mismo tipo. Si hay tareas con tipos diferentes, el bulk no será procesado y se devolverá el siguiente error:

{
    "code": "400",
    "message": "All tasks from the bulk have to be of the same type",
    "description": "All tasks from the bulk have to be of the same type, but this bulk has tasks of different types: [OTHER_PROCESSING, PAYMENT_PROCESSING].",
    "instance": "/bulk-tasks/assign-and-execute"
}

Obtener Bulk Informe de Acción

Esta acción devuelve información sobre el estado actual de la bulk acción. El cliente puede utilizar esta acción para verificar si el bulk la acción aún está en proceso, o se ha completado, verificando si el estado es Processing o Completed.

Obteniendo el bulk el informe de acción se realiza a través de HTTP Solicitud GET /bulk-tareas/<bulk-id>. Para más detalles consulte API sección.

La información recuperada por el informe es:

  • createdAt: el momento en que bulk se crea (se inicia el procesamiento)

  • estado: estado actual del bulk acción (Procesando o Completado)

  • operatorId: el id del operador que inició el bulk acción-taskIds: lista de identificadores de tareas incluidos en el bulk-errores: lista de errores para una acción de tarea única. Se pueden realizar varias acciones de tarea única en una tarea. Por esta razón, la lista de errores puede tener múltiples errores para una sola tarea, pero cada error tiene información sobre la acción de tarea única.

"errors": [
    {
        "taskId": "b3f34207-992e-4e76-918d-e371c50861be",
        "taskErrors": [
            {
                "action": "Allocate",
                "error": "400: Invalid State - Invalid state 'Cancelled'. Current operation can only be performed from one of [Registered, Allocated] states."
            },
            {
                "action": "Execute",
                "error": "400: Invalid State - Invalid state 'Cancelled'. Current operation can only be performed from the 'Allocated' state."
            }
        ]
    }
]

Implementación

La implementación se realiza utilizando un Akka Event Comportamiento Sourced (ESB) y un dedicado Event Procesador.

bulk overview

El bulk aggregate se implementa como un tres state Event Comportamiento Sourced (ESB):

  • Listo

  • Procesamiento

  • Completado

Cuando una nueva instancia de un bulk ESB se crea, inicialmente está en el state_Lista_, pero se ha cambiado a _Procesando_state inmediatamente. Permanece en el _Processing_state hasta que se completen todas las acciones de tarea única. Luego cambia a _Completado_state.

Diagrama de secuencia:

bulk sequence

Cómo bulk La implementación de la acción de tarea se explica aquí utilizando "Asignar y Ejecutar".bulk acción como un ejemplo.

Procesando Bulk Solicitud de Acción

Cuando bulk la solicitud es recibida de un cliente, se convierte en un comando, que luego se envía al bulk agregar. En este ejemplo, se recibe una solicitud de Asignar y Ejecutar con una lista de dos identificadores de tarea: tarea 1 y tarea 2. Se convierte en el comando Allocate And Execute Bulk y se envía al bulk agregar.

bulk impl 1

El bulk agregar produce lo siguiente events:

  • ProcesamientoPorLotesIniciado-representa el comienzo de la bulk procesamiento. El bulk el agregado reaccionará a esto event cambiando state a Procesamiento y almacenamiento de todos los datos de entrada a la state.

  • BulkProcessorTaskAllocate(tarea 1)- será procesado por el bulk event procesador, convirtiéndolo en el comando Task Allocate y enviándolo al agregado de Tareas.

  • BulkProcessorTaskAllocate(tarea 2)- lo mismo que para el anterior event, solo para la tarea 2.

  • BulkProcessorTaskExecute(tarea 1)- será procesado por el bulk event procesador, convirtiéndolo en un comando Task Execute y enviándolo al agregado de Tareas.

  • BulkProcessorTaskExecute(tarea 2)- lo mismo que para el anterior event, solo para la tarea 2.

  • ProcesamientoDeBulkProcessorCompletado-será procesado por el bulk event procesador, enviando el comando Processing Bulk Done al bulk agregar. El bulk el agregado reaccionará a este comando cambiando su state a Completado.

    Events con el prefijo de nombre _Bulk Processor_ son procesados por el bulk event procesador, otro events son procesados por el bulk agregar.
bulk impl 2

Bulk Processor Task Allocate y Bulk Processor Task Execute_events son procesados por el bulk event procesador, convirtiéndolos en comandos de Tarea únicos apropiados y enviando esos comandos al agregado de Tarea. Si se produce un error durante una Acción de Tarea única, el procesador recopilará la información de error y enviará el comando _Processing Task Error al bulk agregar. El bulk almacenes agregados _Bulk Task Processing Error_event y actualiza su state con detalles del error.

bulk impl 3

Al final, el bulk event el procesador consume el último bulk event_Bulk Processor Processing Done_ al enviar el comando Processing Bulk Done al bulk agregar. El bulk aggregate almacena un nuevo event_Bulk Processing Done_ y conmutadores state a Completado.

Este es el final de bulk ciclo de procesamiento.

Garantías

Bulk almacenes agregados ya sea todos los events o nada. Esta acción es atómica y está garantizada por Akka. Previene la situación en la que algunos bulk events se almacenan (y se procesan por el bulk event procesador) y algunos no lo son.

Si se produjo un error inesperado/sistema/tiempo de espera al enviar comandos a bulk agregar de bulk event procesador, el event(el origen del comando) no será marcado como procesado (el bulk event el desplazamiento del procesador no se actualizará). El Bulk event el procesador intentará procesar el mismo event de nuevo.

Bulk event el procesador envía comandos al bulk agregar utilizando Akka patrón de consulta. Es posible que el bulk aggregate recibe un comando y como resultado del procesamiento del comando devuelve una respuesta de fallo. Ante una respuesta de fallo, el bulk event el procesador registra el error y continúa. En el caso de un error que es manejado por el bulk agregar,bulk el procesamiento no se detiene (event el procesamiento no se reintentará).