Zombie in BizTalk Server
Cos'è un messaggio zombie?
Un messaggio zombie è un messaggio instradato a un'orchestrazione in esecuzione da una coda MessageBox "in elaborazione" al termine dell'orchestrazione. Un messaggio in elaborazione è un messaggio che è stato instradato a un'istanza del servizio e di conseguenza si trova in una coda MessageBox destinata all'istanza del servizio. Da momento che il messaggio non può più essere gestito dall'istanza di orchestrazione di sottoscrizione, viene sospeso e contrassegnato da un valore ServiceInstance/State "Sospeso (non può essere ripristinato)".
Un'istanza del servizio zombie è l'istanza di un'orchestrazione che viene completata mentre un messaggio che viene instradato all'istanza di orchestrazione dalla coda MessageBox è ancora in elaborazione. Da momento che l'istanza di orchestrazione è terminata, non può più gestire messaggi in elaborazione e viene quindi sospesa e contrassegnata da un valore ServiceInstance/State "Sospeso (non può essere ripristinato)".
Cause tipiche
L'occorrenza di zombie in genere rientra nelle categorie seguenti:
Termina i messaggi di controllo : il motore di orchestrazione consente l'uso dei messaggi di controllo per annullare tutto il lavoro attualmente in esecuzione in un'istanza di orchestrazione specifica. Dal momento che il messaggio di controllo interrompe immediatamente l'orchestrazione in esecuzione, le istanze zombie non sono previste. Un numero di flussi di lavoro risorse umane correlati alle progettazioni tendono a utilizzare questo meccanismo, così come altre progettazioni.
Ascolto parallelo riceve : in questo scenario l'istanza del servizio attende 1 di n messaggi e quando riceve determinati messaggi funziona e termina. Se i messaggi vengono ricevuti in un ramo parallelo quando l'istanza del servizio sta per terminare, verranno creati zombie.
Chiamate sequenziali con endpoint non deterministici: in questo scenario una pianificazione dell'orchestrazione master è progettata per gestire tutti i messaggi di un determinato tipo per soddisfare alcuni tipi di requisiti di progettazione del sistema. Tali requisiti di progettazione possono includere recapito ordinato, dispenser di risorse e batch. Per questo scenario, la tendenza è quella di definire un ciclo while circostante a una forma ascolto con un ramo avente una ricezione e l'altro avente una forma ritardo seguite da un costrutto che imposta alcune variabili per indicare che il ciclo while deve interrompersi. Ciò non è deterministico dal momento che è possibile attivare il ritardo ma il messaggio può comunque essere consegnato. Endpoint non deterministici come questo inducono alla generazione di zombie.
Quando viene sospesa un'istanza del servizio zombie, viene generato il messaggio di errore seguente:
0xC0C01B4C The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended.
È possibile usare BizTalk Terminator per rimuovere gli zombie.
Vedere anche
Rimozione di istanze di servizio sospese nelle linee guida per l'interfaccia utente e informazioni di riferimento sullo spazio dei nomi delle API per sviluppatori