Control de interrupciones en la solución de administración de procesos empresariales
En esta sección se describe el mecanismo de control de interrupciones utilizado en la solución de administración de procesos empresariales. El uso del mecanismo de interrupción permite detener el procesamiento de pedidos cuando se actualiza o cancela un pedido.
Control de interrupciones
Las orquestaciones que implementan las fases de procesamiento llaman a una orquestación, CheckInterrupt, que comprueba si hay una solicitud de interrupción de alguna otra parte del proceso. La orquestación CheckInterrupt consta de una forma listen . Una rama de la forma Escucha comprueba si hay un mensaje con el mismo identificador de correlación que el orden actual. Si hay un mensaje de este tipo, la orquestación CheckInterrupt envía un mensaje de confirmación y ejecuta una forma Throw . Dado que las ramas de una forma listen se ejecutan de izquierda a derecha, el retraso aparece en la rama derecha. Observe que el retraso es cero (0).
La combinación de la forma Escucha , una rama de recepción y una rama de retraso permite que la orquestación compruebe si hay mensajes. Si hay un mensaje de interrupción, se ejecuta la rama izquierda. Si no hay ningún mensaje, se ejecuta la rama derecha y vuelve a la orquestación de llamada. Se puede enviar un mensaje de interrupción en cualquier momento. Dado que la orquestación CheckInterrupt solo se ejecuta ocasionalmente, puede haber un mensaje de interrupción esperando.
OrderManager establece interrupciones mediante una llamada a la orquestación del interruptor. La orquestación del interruptor envía un mensaje de interrupción a InterruptPort y espera una respuesta. La orquestación usa la propiedad Timeout de la forma Scope envolvente para reiniciar el bucle si no se recibe una respuesta. La orquestación continúa enviando el mensaje de interrupción siempre que el ámbito exceda el tiempo de espera antes de recibir una respuesta. Un tiempo de espera indica que la solicitud coincidió con una suscripción pero que no ha habido tiempo para una respuesta. El bucle finaliza si hay una respuesta o si no hay ninguna suscripción a InterruptPort.
El patrón request-response-completion que orderManager usa con las fases del proceso es una parte fundamental del control de interrupciones. Dado que OrderManager espera una respuesta (una confirmación) desde la fase, sabe que la fase ha empezado a ejecutarse antes de continuar. De este modo se garantiza que una fase no puede recibir una interrupción antes de iniciarse. Esto también permite al OrderManager saber que, si no hay ninguna suscripción a una interrupción, la fase se ha completado.
Consulte también
Procesamiento en la solución de administración de procesos empresariales
Lógica del administrador de procesos
ExceptionHandler (orquestación)