Condividi tramite


Gestione degli interrupt nella soluzione di gestione dei processi di business

In questa sezione viene descritto il meccanismo di gestione delle interruzioni utilizzato nella soluzione Gestione dei processi di business. Questo meccanismo consente di interrompere l'elaborazione di un ordine quando questo viene aggiornato o annullato.

Gestione delle interruzioni

Le orchestrazioni che implementano le fasi di elaborazione chiamano un'orchestrazione , CheckInterrupt, che verifica la presenza di una richiesta di interruzione da un'altra parte del processo. L'orchestrazione CheckInterrupt è costituita da una forma Listen . Un ramo della forma Listen controlla la presenza di un messaggio con lo stesso ID di correlazione dell'ordine corrente. Se è presente un messaggio di questo tipo, l'orchestrazione CheckInterrupt invia un messaggio di acknowledgement ed esegue una forma Throw . Poiché i rami in una forma Listen vengono eseguiti da sinistra a destra, il ritardo viene visualizzato nel ramo destro. Si noti che il ritardo è pari a zero (0).

La combinazione della forma Listen , di un ramo di ricezione e di un ramo di ritardo consente all'orchestrazione di verificare la presenza di messaggi. Se è presente un messaggio di interruzione, viene eseguito il ramo sinistro. In caso contrario, viene eseguito il ramo destro e l'elaborazione ritorna all'orchestrazione chiamante. Un messaggio di interruzione può essere inviato in qualsiasi momento. Poiché l'orchestrazione CheckInterrupt viene eseguita solo occasionalmente, potrebbe essere presente un messaggio di interruzione in attesa.

OrderManager imposta gli interrupt chiamando l'orchestrazione interrupter. L'orchestrazione interrupter invia un messaggio di interruzione a InterruptPort e attende una risposta. L'orchestrazione usa la proprietà Timeout della forma Scope contenitore per riavviare il ciclo se non viene ricevuta una risposta. L'orchestrazione continua a inviare il messaggio di interruzione finché non si verifica il timeout dell'ambito prima di ricevere una risposta. Un timeout indica che è stata rilevata una sottoscrizione, ma che è stato superato il limite di tempo per una risposta. Il ciclo termina se è presente una risposta o se non è presente alcuna sottoscrizione a InterruptPort.

Il modello request-response-completion usato da OrderManager con le fasi del processo è una parte fondamentale della gestione degli interrupt. Poiché OrderManager attende una risposta, ovvero un acknowledgement, dalla fase, sa che la fase è stata avviata prima di continuare. Questo comportamento garantisce che una fase non può ricevere un'interruzione prima di essere avviata. Ciò consente anche a OrderManager di sapere che, se non è presente alcuna sottoscrizione a un interrupt, la fase è stata completata.

Vedere anche

Elaborazione nella soluzione di gestione dei processi di business
Logica della gestione processi
Orchestrazione ExceptionHandler