Consegna sicura e garanzie di consegna dei messaggi

 

Coerenza dello stato e garanzie di consegna dei messaggi

Per i flussi di lavoro che rappresentano processi con stato vengono in genere usate transazioni distribuite per eseguire la transazione dell'elaborazione di un messaggio con lo stato aggiornato dell'istanza del flusso di lavoro, in modo da garantire che il messaggio venga elaborato esattamente una volta.Progettazione flussi di lavoro 1.0 non si basa su MSDTC per mantenere la coerenza di stato fra l'istanza del flusso di lavoro e i relativi messaggi.È stato implementato un modello di coerenza finale che si basa sul bus di servizio per consentire che i messaggi in ingresso vengano elaborati esattamente una volta in un ambiente altamente scalabile.Questo tuttavia dà luogo ad alcune differenze sostanziali nella gestione dei messaggi in ingresso e in uscita con il flusso di lavoro.

Viene garantito che i messaggi in ingresso, inviati tramite l'endpoint delle notifiche precedentemente illustrato, vengano consegnati al flusso di lavoro, purché sia restituito un codice di stato 200.I messaggi possono essere ripetuti in modo idempotente purché specifichino lo stesso MessageId, per assicurare che l'affidabilità del trasporto HTTP non abbia effetto sulla garanzia complessiva di consegna.Internamente, una volta ricevuto dall'endpoint delle notifiche, il messaggio resta archiviato nel bus di servizio finché non viene recapitato a uno o più flussi di lavoro.

Quando viene ricevuto da un flusso di lavoro, il messaggio viene caricato e ne viene avviata o ripresa l'esecuzione.Durante un episodio di esecuzione di flusso di lavoro, qualsiasi lavoro con effetto collaterale, ad esempio i messaggi in uscita inviati mediante attività HTTP, viene raccolto e conservato fino a quando lo stato aggiornato del flusso di lavoro non è stato salvato.A quel punto il messaggio in ingresso, che è stato ormai elaborato, viene rimosso dall'archivio permanente e il lavoro con effetto collaterale viene eseguito.I messaggi in uscita vengono inviati e successivamente ripetuti, nel caso in cui non sia stato possibile inviarli a causa di problemi di rete o errori di elaborazione.Il risultato finale è la garanzia che i messaggi in uscita vengano inviati almeno una volta, pertanto può essere necessario progettare i servizi Web per la gestione dei messaggi in modo idempotente.Le risposte vengono restituite al flusso di lavoro in modo da riprenderne l'esecuzione.