Ciclo di vita dei nodi di elaborazione dei messaggi definiti dall'utente in C

In questo argomento vengono esaminate le varie fasi di vita di un nodo di elaborazione dei messaggi definito dall'utente scritto utilizzando il linguaggio di programmazione C. Vengono esaminati gli oggetti che vengono creati ed eliminati e le classi e le funzioni di implementazione che vengono richiamate nelle seguenti fasi:

Le informazioni contenute in questo argomento sono valide sia per i nodi di output che per i nodi di elaborazione dei messaggi. Entrambi questi tipi di nodi possono essere considerati insieme in quanto, sebbene il nodo di elaborazione dei messaggi venga usato di solito per elaborare un messaggio e quello di output per fornire un output nella forma di un flusso di bit, per eseguire tali funzioni è possibile utilizzare sia l'uno che l'altro.

Registrazione

Un nodo di elaborazione dei messaggi definito dall'utente viene registrato con il broker quando la LIL che contiene il nodo viene caricata ed inizializzata dal sistema operativo.

Il broker richiama bipGetMessageflowNodeFactory per stabilire la funzione della LIL e la modalità secondo cui questa deve essere richiamata.

La funzione bipGetMessageflowNodeFactory richiama a sua volta la funzione cniCreateNodeFactory che restituisce un nome di gruppo o produttore per tutti i nodi supportati dalla LIL in uso.

La LIL deve quindi richiamare la funzione di utilità cniDefineNodeClass per trasferire sia il nome di ciascun nodo che una tabella di funzioni virtuale dei puntatori delle funzioni di implementazione.

Creazione istanza

Durante tale fase, viene creata un'istanza di un nodo di elaborazione dei messaggi definito dall'utente. La fase inizia quando il broker crea un flusso di messaggi e richiama la funzione cniCreateNodeContext per ciascuna creazione istanza del nodo definito dall'utente in tale flusso di messaggi. La funzione cniCreateNodeContext è quella specificata nel campo iFpCreateNodeContext dello struct CNI_VFT trasferito a cniDefineNodeClass per tale tipo di nodo. Questa funzione deve assegnare le risorse richieste per tale nodo, inclusa la memoria in modo che la creazione istanza del nodo definito dall'utente può contenere i valori per gli attributi configurati.

Il broker crea un'istanza di nodo e richiama cniCreateNodeContext nei casi riportati di seguito.
  • Il flusso di messaggi viene creato:
    • all'avvio del broker (l'utente ha eseguito mqsistart). Qualsiasi flusso di messaggi distribuito in precedenza viene ricreato quando il broker viene avviato.
    • al nuovo caricamento del gruppo di esecuzione (l'utente ha eseguito mqsireload). Qualsiasi flusso di messaggi distribuito in precedenza viene ricreato quando il gruppo di esecuzione viene caricato di nuovo.
    • al verificarsi di un grave errore all'interno del gruppo di esecuzione; ciò provoca il riavvio del gruppo di esecuzione.
  • Il flusso di messaggi viene distribuito nuovamente. Quando un flusso di messaggi viene modificato e distribuito nuovamente, il broker elabora la nuova distribuzione eliminando tutti i nodi nel flusso e quindi ricreandoli con la nuova configurazione.
Nota: un flusso di messaggi non viene creato quando viene avviato un gruppo di esecuzione. L'arresto di un gruppo di esecuzione interrompe semplicemente tutti i flussi, ma non elimina il flusso o riduce l'elaborazione. Il riavvio di un gruppo di esecuzione, provoca l'avvio dei flussi di messaggi, ma non li ricrea.

Nell'ambito di cniCreateContext, l'estensione definita dall'utente richiama le due funzioni cniCreateInputTerminal e cniCreateOutputTerminal al fine di stabilire i terminali di input e output di cui dispone il nodo di elaborazione dei messaggi.

Elaborazione

Durante la fase di elaborazione del ciclo di vita di un nodo di elaborazione dei messaggi definito dall'utente, il messaggio subisce delle trasformazioni, quando hanno luogo alcune operazioni di elaborazione sul messaggio di input.

Quando il broker richiama un messaggio dalla coda e questo arriva nel terminale di input del nodo definito dall'utente, il broker richiama la funzione di implementazione cniEvaluate. Questa funzione viene utilizzata per decidere come procedere con il messaggio.

E' possibile utilizzare una serie di funzioni di utilità nel nodo di elaborazione dei messaggi definito dall'utente per eseguire una serie di funzioni di elaborazione dei messaggi, come ad esempio accedere ai dati del messaggio, accedere a ESQL, trasformare un oggetto del messaggio e distribuire un messaggio. E' necessario includere le funzioni di utilità del nodo che si intende utilizzare per elaborare il messaggio all'interno della funzione cniEvaluate.

Questa interfaccia non crea automaticamente una struttura ad albero secondaria delle proprietà per un messaggio. Non è un requisito di un messaggio disporre di una tale struttura sebbene potrebbe risultare utile crearne una per fornire una struttura ad albero del messaggio coerente indipendentemente dal nodo di input. Se si desidera creare una struttura ad albero secondaria delle proprietà in un messaggio, e si sta anche utilizzando un nodo di input definito dall'utente, è necessario procedere a ciò autonomamente.

Eliminazione

Quando un nodo di elaborazione dei messaggi definito dall'utente ha elaborato un messaggio, è necessario assicurarsi che venga eliminato, in modo da rilasciare le risorse di sistema utilizzate e per rilasciare eventuali aree di dati specifiche dell'istanza del nodo, come ad esempio il contesto, acquisite in fase di costruzione o elaborazione del messaggio.

Un'istanza di un nodo di elaborazione dei messaggi definito dall'utente viene eliminata quando il broker richiama la funzione cniDeleteNodeContext.

Il broker richiama cniDeleteNodeContext quando viene eliminata l'istanza del nodo. Gli eventi riportati di seguito possono provocare l'eliminazione di un nodo.
  • Interruzioni controllate dell'elaborazione del gruppo di esecuzione:
    • all'arresto del broker (l'utente ha eseguito mqsistop)
    • al nuovo caricamento del gruppo di esecuzione (l'utente ha eseguito mqsireload)
    • al verificarsi di un grave errore all'interno del gruppo di esecuzione; ciò provoca il riavvio del gruppo di esecuzione.
    Nota: ciò NON include l'arresto di un gruppo di esecuzione. L'arresto di un gruppo di esecuzione interrompe semplicemente tutti i flussi, ma non elimina il flusso o riduce l'elaborazione.
  • Il flusso di messaggi viene eliminato. Ad esempio, un flusso di messaggi viene eliminato dalla vista Amministrazione broker degli strumenti.
  • Il flusso di messaggi viene distribuito nuovamente. Quando un flusso di messaggi viene modificato e distribuito nuovamente, il broker elabora la nuova distribuzione eliminando tutti i nodi nel flusso e quindi ricreandoli con la nuova configurazione.
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as01394_