Partager via


Gestion des interruptions dans la solution de gestion des processus d’entreprise

Cette section décrit le mécanisme de gestion de l'interruption utilisé dans la solution de gestion des processus d'entreprise. Ce mécanisme permet d'arrêter le traitement des commandes lorsque l'une d'elles est mise à jour ou annulée.

Gestion de l'interruption

Les orchestrations qui implémentent les étapes de traitement appellent une orchestration, CheckInterrupt, qui teste une demande d’interruption d’une autre partie du processus. L’orchestration CheckInterrupt se compose d’une forme Écouter. Une branche de la forme Écouter recherche un message avec le même ID de corrélation que l’ordre actuel. S’il existe un tel message, l’orchestration CheckInterrupt envoie un message d’accusé de réception et exécute une forme Throw . Étant donné que les branches d’une forme Écouter sont exécutées de gauche à droite, le délai s’affiche dans la branche droite. Notez que le délai est de zéro (0).

La combinaison de la forme Écouter, d’une branche de réception et d’une branche de délai permet à l’orchestration de case activée pour les messages. Si elle trouve un message d'interruption, la branche de gauche est exécutée. Si l'orchestration ne trouve rien, la branche de droite est exécutée et est renvoyée à l'orchestration d'appel. Un message d'interruption peut être envoyé à tout moment. Étant donné que l’orchestration CheckInterrupt n’est exécutée qu’occasionnellement, un message d’interruption peut l’attendre.

OrderManager définit des interruptions en appelant l’orchestration de l’interrupteur. L’orchestration de l’interrupteur envoie un message d’interruption à InterruptPort et attend une réponse. L’orchestration utilise la propriété Timeout de la forme Étendue englobante pour redémarrer la boucle si aucune réponse n’est reçue. Elle continue d'envoyer un message d'interruption tant que la forme Étendue expire sans recevoir de réponse. Un délai d'expiration indique que la demande correspond à un abonnement, mais que la réponse n'a pas eu le temps d'être envoyée. La boucle se termine s’il y a une réponse ou s’il n’y a pas d’abonnement à InterruptPort.

Le modèle requête-réponse-achèvement que OrderManager utilise avec les étapes de processus est un élément essentiel de la gestion des interruptions. Étant donné que OrderManager attend une réponse (un accusé de réception) de la phase, il sait que la phase a commencé à s’exécuter avant de continuer. Ceci garantit qu'une étape ne peut pas recevoir d'interruption avant d'avoir démarré. Cela permet également à OrderManager de savoir que, s’il n’y a pas d’abonnement à une interruption, l’étape est terminée.

Voir aussi

Traitement dans la solution de gestion des processus métier
Logique du gestionnaire de processus
Orchestration ExceptionHandler