Zombies en BizTalk Server
¿Qué es un zombie?
Un mensaje zombie es un mensaje que se ha enrutado hacia una orquestación en ejecución desde el cuadro de mensajes y estaba "en proceso" cuando finalizó la orquestación. Un mensaje "en proceso" es un mensaje que se ha enrutado hacia una instancia de servicio y, por consiguiente, se encuentra en una cola del cuadro de mensajes destinada a esa instancia de servicio. Dado que la instancia de la orquestación suscriptora ya no puede consumir el mensaje, éste último queda suspendido y se marca con el valor "Suspendido (No reanudable)" en ServiceInstance/State.
Una instancia de servicio zombie es una instancia de una orquestación que se completó mientras un mensaje enrutado hacia la instancia de orquestación desde el cuadro de mensajes estaba aún "en proceso". Dado que la instancia de la orquestación ha finalizado, ya no puede consumir los mensajes "en proceso", por lo que queda suspendida y se marca con el valor "Suspendido (No reanudable)" en ServiceInstance/State.
Causas típicas
Los zombies suelen corresponder a una de las siguientes categorías:
Finalizar mensajes de control: el motor de orquestación permite el uso de mensajes de control para cancelar todo el trabajo que se está ejecutando actualmente en una instancia de orquestación específica. Puesto que el mensaje de control detiene inmediatamente la orquestación en ejecución, cabe esperar que se produzca alguna instancia zombie. Algunos diseños, como los relacionados con el flujo de trabajo de usuarios, suelen usar este mecanismo.
Recepción de escucha paralela : en este escenario, la instancia de servicio espera 1 de n mensajes y cuando recibe determinados mensajes, realiza algún trabajo y finaliza. Si se reciben mensajes por una rama paralela justo mientras la instancia de servicio está finalizando, se crean zombies.
Convoyes secuenciales con puntos de conexión no deterministas : en este escenario, una programación de orquestación maestra está diseñada para controlar todos los mensajes de un tipo determinado para satisfacer algún tipo de requisito de diseño del sistema. Estos requisitos del sistema pueden incluir entrega ordenada, distribuidor de recursos y procesamiento por lotes. Para este escenario, la tendencia es definir un bucle while que rodea un comando listen con una rama que tenga una forma de recepción y otra rama con una forma de retraso, seguido por algún tipo de construcción que establece una variable para indicar que el bucle while debe detenerse. Se trata de un código no determinista, puesto que podría activarse el retraso y, aún así, entregarse un mensaje. Los extremos no deterministas como éste son proclives a generar zombies.
Cuando se suspende una instancia de servicio zombie, se genera el siguiente mensaje de error:
0xC0C01B4C The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended.
Puede usar el terminador de BizTalk para ayudar a eliminar zombis.
Consulte también
Eliminación de instancias de servicio suspendidas en la guía de la interfaz de usuario y la referencia del espacio de nombres de api para desarrolladores