Partager via


Zombies dans BizTalk Server

Qu'est-ce qu'un zombie ?

  • Un message zombie est un message qui a été acheminé vers une orchestration en cours d'exécution depuis la MessageBox et qui se trouve "en vol" au moment où l'orchestration prend fin. Un message "en vol" est un message qui a été acheminé vers une instance de service et qui se trouve donc dans une file d'attente de la MessageBox dédiée à cette instance de service. Puisque le message ne peut plus être utilisée par l'instance d'orchestration d'abonnement, il est suspendu et reçoit la valeur Instance de service/État "Suspendu (ne peut être repris)".

  • Une instance de service zombie est une instance d'orchestration qui a pris fin pendant qu'un message en cours d'acheminement vers l'instance d'orchestration à partir la MessageBox se trouvait encore "en vol". Puisque l'instance d'orchestration est terminée, elle ne peut plus utiliser les messages "en vol" ; elle est donc suspendue et reçoit la valeur Instance de service/État "Suspendu (ne peut être repris)".

Causes typiques

Les occurrences de zombies appartiennent en général à l'une des catégories suivantes :

  1. Terminer les messages de contrôle : le moteur d’orchestration permet d’utiliser des messages de contrôle pour annuler tout le travail en cours d’exécution dans un instance d’orchestration spécifique. Puisque le message de contrôle stoppe immédiatement l'orchestration en cours d'exécution, les instances zombies ne sont impossibles. Plusieurs conceptions relatives au Human Workflow, entre autres, ont tendance à utiliser ce mécanisme.

  2. L’écoute parallèle reçoit : dans ce scénario, le service instance attend 1 des n messages et lorsqu’il reçoit certains messages, il effectue un travail et se termine. Si des messages sont reçus sur une branche parallèle au moment où l'instance de service prend fin, des zombies sont créés.

  3. Convois séquentiels avec des points de terminaison non déterministes : dans ce scénario, une planification d’orchestration master est conçue pour gérer tous les messages d’un certain type afin de répondre à un certain type d’exigence de conception système. Ces exigences de conception incluent la livraison chronologique des messages, les distributeurs de ressources et le traitement par lot. Pour ce scénario, il est question de définir une boucle while d'écoute, avec une branche de la forme Réception et l'autre de la forme Attente, suivies d'une certaine construction contenant des variables gouvernant l'arrêt de la boucle while. Il n'est pas question de déterminisme car un message peut être livré même si l'attente est déclenchée. Les points de terminaison non déterministes de ce type ont tendance à générer des zombies.

    Lorsqu’un service zombie instance est suspendu, le message d’erreur suivant est généré :

0xC0C01B4C The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended.

Vous pouvez utiliser BizTalk Terminator pour aider à supprimer les zombies.

Voir aussi

Suppression des instances de service suspendues dans les conseils d’interface utilisateur et les informations de référence sur l’espace de noms d’API des développeurs