Come è popolata la struttura ad albero del messaggio

La struttura ad albero del messaggio è inizialmente popolata dal nodo di input del flusso di messaggi.

Quando il nodo di input riceve il messaggio di input, esso crea la struttura ad albero Properties (la prima struttura ad albero secondaria dell'albero del messaggio) e la popola con le proprietà del nodo configurate nel flusso di messaggi. Poi esamina il contenuto del flusso di bit del messaggio di input e crea il resto della struttura ad albero del messaggio in modo da riflettere tale contenuto. Questo processo dipende in qualche misura dal nodo di input stesso, che è governato dal trasporto attraverso cui è ricevuto il messaggio:

Protocolli WebSphere MQ Enterprise Transport, e WebSphere MQ Telemetry Transport
Se l'applicazione comunica con il broker tramite questi protocolli e il flusso di messaggi include il nodo corrispondente MQInput, o SCADAInput, tutti i messaggi ricevuti devono cominciare con un'intestazione MQMD (Message Queue Message Descriptor). Se non è presente un MQMD valido all'inizio del messaggio, il messaggio viene rifiutato e l'elaborazione si interrompe.

Il nodo di input prima richiama il programma di analisi MQMD e crea la struttura ad albero secondaria per quella intestazione.

Un messaggio può avere zero o più intestazioni aggiuntive che seguono MQMD e queste intestazioni sono concatenate, con il campo Format di un'intestazione che definisce il formato dell'intestazione successiva, fino all'ultima intestazione inclusa, che definisce il formato del contenuto del messaggio. Se è presente un'intestazione MQRFH e MQRFH2 nella catena, i dati nome/valore in una di queste due intestazioni possono contenere anche informazioni circa il formato dei dati successivi. Se il valore specificato in Format è un programma di analisi riconosciuto, questo ha sempre la precedenza sui dati nome/valore.

Il broker richiama il programma di analisi appropriato per interpretare ogni intestazione, seguendo la catena nel messaggio. Ogni intestazione è analizzata in modo indipendente. I campi all'interno di una singola intestazione sono analizzati in un ordine che è governato dal programma di analisi. Non è possibile prevedere o fare affidamento sull'ordine prescelto, ma l'ordine in cui vengono analizzati i campi non influisce sull'ordine in cui essi appaiono all'interno dell'intestazione.

Il broker assicura che venga conservata l'integrità delle intestazioni che precedono un contenuto del messaggio. Il formato di ogni parte del messaggio è definito dal campo Format nell'intestazione immediatamente precedente (se la parte successiva è un formato WebSphere MQ riconosciuto) o dai valori impostati nell'intestazione MQRFH o MQRFH2:

  • Il formato della prima intestazione è noto, poiché deve trattarsi di MQMD.
  • Il formato di tutte le intestazioni successive nel messaggio è impostato nel campo Format nell'intestazione precedente.
  • Il formato del contenuto corrisponde al dominio di messaggi e al programma di analisi che deve essere richiamato per il contenuto del messaggio (ad esempio, XML). Queste informazioni sono impostate nell'intestazione MQRFH o MQRFH2 o nella proprietà del dominio di messaggi del nodo di input che riceve il messaggio.

Questo processo è ripetuto tante volte quanto è richiesto dal numero di intestazioni che precede il contenuto del messaggio. Non è necessario che a popolare questi campi sia l'utente; è il broker stesso a gestire questa sequenza.

Il broker completa questo processo per garantire che i campi Format nelle intestazioni identifichino in modo corretto ogni parte del messaggio. Se il broker non lo fa, WebSphere MQ potrebbe non essere in grado di consegnare il messaggio. Poiché il programma di analisi del contenuto del messaggio non è un formato di intestazione WebSphere MQ riconosciuto, il broker sostituisce questo valore nel campo Format dell'ultima intestazione con il valore MQFMT_NONE. Il valore originale in quel campo è memorizzato nel campo Domain nell'intestazione MQRFH o MQRFH2 per conservare le informazioni circa il contenuto del messaggio. Senza MQRFH o MQRFH2, le informazioni sono memorizzate nella struttura ad albero Properties.

Ad esempio, se l'intestazione MQRFH2 precede immediatamente il contenuto del messaggio e il relativo campo Format è impostato su XML, indicando che il contenuto del messaggio deve essere analizzato dal programma di analisi XML generico, il campo Domain MQRFH2 è impostato su XML e il relativo campo Format reimpostato su MQFMT_NONE.

Tali azioni potrebbero far sì che le informazioni siano memorizzate esplicitamente da un'espressione ESQL sostituita dal broker.

Una volta analizzate tutte le intestazioni e le strutture ad albero secondarie create corrispondenti all'interno della struttura ad albero del messaggio, il nodo di input associa il programma di analisi specificato al contenuto del messaggio. E' necessario specificare il programma di analisi da associare al contenuto del messaggio. Questo è possibile in un'intestazione nel messaggio, ad esempio la cartella <mcd> all'interno dell'intestazione MQRFH2 (generalmente consigliato) o nelle proprietà del nodo di input (consigliato se il messaggio non include intestazioni). Il nodo di input stabilisce l'associazione come descritto di seguito:

  • Se il messaggio ha un'intestazione MQRFH o MQRFH2, il dominio identificato nell'intestazione (in Format o nei dati nome/valore) determina il programma di analisi associato a questo messaggio.

    Il nodo SCADAInput crea messaggi formato WebSphere MQ con intestazioni MQRFH2 dai messaggi di input che il listener riceve sulla porta TCP/IP.

  • Se il messaggio non ha un'intestazione MQRFH o MQRFH2 oppure l'intestazione non identifica il dominio, ma le proprietà del nodo di input, memorizzate nella struttura ad albero relativa alle proprietà, indicano il dominio del messaggio, viene utilizzato il programma di analisi specificato dalla proprietà del nodo di input. E' possibile specificare un programma di analisi definito dall'utente.
  • Se il dominio di messaggi non può essere identificato dai valori dell'intestazione o dalle proprietà del nodo di input, il messaggio è gestito come oggetto binario (BLOB). Il programma di analisi BLOB è associato al messaggio. Un BLOB può essere interpretato come stringa di caratteri esadecimali e può essere modificato o esaminato nel flusso di messaggi specificando l'ubicazione della serie secondaria della stringa.

Il contenuto del messaggio non è analizzato per motivi relativi alle prestazioni; è possibile che la configurazione del flusso di messaggi non richieda l'analisi del contenuto del messaggio. Il contenuto è analizzato solo se si fa ad esso riferimento durante il flusso di messaggi.

Ad esempio, il contenuto del messaggio è analizzato quando si fa riferimento a Root.XML.Field (o InputRoot.XML.Field nel nodo Compute) o Root.MRM.Field. A seconda dei percorsi presi nel flusso di messaggi, questa analisi potrebbe aver luogo in punti diversi. A questa analisi, quando in primo luogo è necessario un approccio, si fa riferimento anche come analisi parziale e nella normale elaborazione essa non influenza la logica di un flusso di messaggi. Tuttavia, esistono delle implicazioni per gli scenari di gestione degli errori, come descritto in Gestione degli errori nei flussi di messaggi.

Se si desidera che un flusso di messaggi accetti i messaggi da più di un dominio di messaggi, è possibile includere un'intestazione MQRFH2 nel messaggio da cui i nodi di input estraggono il dominio di messaggi e le informazioni correlate sulla definizione del messaggio (serie, tipo e formato).

Se si impostano le intestazioni del messaggio o le proprietà del nodo di input per identificare un programma di analisi definito dall'utente, il modo in cui esso interpreta il messaggio e crea la struttura ad albero logica potrebbe differenziarsi da quello qui descritto.

Protocolli WebSphere MQ Multicast Transport, WebSphere MQ Real-time Transport e WebSphere MQ Web Services Transport
Se l'applicazione comunica con il broker tramite questi protocolli supportati e il flusso di messaggi include i nodi corrispondenti Real-timeInput, HTTPInput o HTTPRequest, ai messaggi ricevuti non è richiesto di includere un'intestazione particolare. Le applicazioni possono includere l'intestazione MQRFH2 per fornire le informazioni relative al messaggio, ad esempio sulle pubblicazioni e sottoscrizioni. Se sono incluse delle intestazioni riconosciute, il nodo di input richiama i programmi di analisi appropriati per interpretare le intestazioni e costruire le relative parti della struttura ad albero del messaggio, come descritto per gli altri protocolli supportati.

Se non esistono intestazioni o queste intestazioni non specificano il programma di analisi per il contenuto del messaggio, è necessario impostare le proprietà del nodo di input per definire il programma di analisi del contenuto del messaggio. In caso contrario, il messaggio è considerato come BLOB. E' possibile specificare un programma di analisi definito dall'utente.

Il programma di analisi specificato è associato al contenuto del messaggio tramite il nodo di input (come per i protocolli WebSphere MQ Enterprise Transport, WebSphere MQ Mobile Transport e WebSphere MQ Telemetry Transport) e il contenuto del messaggio non è analizzato.

Se si impostano le intestazioni del messaggio o le proprietà del nodo di input per identificare un programma di analisi definito dall'utente, il modo in cui esso interpreta il messaggio e crea la struttura ad albero logica potrebbe differenziarsi da quello qui descritto.

Tutti gli altri protocolli
Se si desidera che il flusso di messaggi accetti i messaggi da un protocollo di trasporto per il quale WebSphere Message Broker non fornisce supporto integrato o si desidera fornire un'elaborazione specifica al momento della ricezione di un messaggio, utilizzare l'interfaccia di programmazione del linguaggio Java o C per creare un nuovo nodo di input definito dall'utente.

Tale interfaccia non genera automaticamente una struttura ad albero secondaria relativa alle proprietà per un messaggio (tale struttura ad albero secondaria è illustrata nella sezione Struttura ad albero del messaggio). Una struttura ad albero secondaria relativa alle proprietà non costituisce un requisito per un messaggio, sebbene potrebbe risultare utile crearne una per fornire una struttura ad albero secondaria del messaggio coerente indipendentemente dal nodo di input. Se si desidera creare una struttura ad albero relativa alle proprietà all'interno della struttura ad albero del messaggio e si sta utilizzando un nodo di input definito dall'utente, è necessario farlo per proprio conto.

Se si ha la necessità di elaborare messaggi che non sono conformi ad alcuno dei domini di messaggi definiti, è possibile utilizzare l'interfaccia di programmazione del linguaggio C per creare un nuovo programma di analisi definito dall'utente.

Fare riferimento all'interfaccia del nodo per comprendere come questo utilizza i programmi di analisi e se è possibile configurarlo per modificarne il funzionamento. Se il nodo utilizza un programma di analisi definito dall'utente, la struttura ad albero creata per il messaggio potrebbe esser leggermente diversa da quella creata per i programmi di analisi integrati. Un nodo di input definito dall'utente è in grado di analizzare un messaggio di input completamente o può partecipare all'analisi parziale in cui il contenuto del messaggio è analizzato solo quando richiesto.

E' possibile creare anche i propri nodi di output e di elaborazione del messaggio in C o Java.

Concetti correlati
Struttura ad albero logica
Struttura ad albero del messaggio
Struttura ad albero Environment
Struttura ad albero LocalEnvironment
Struttura ad albero ExceptionList
Analisi parziale
Nomi di correlazione
Attività correlate
Gestione degli errori nei flussi di messaggi
Sviluppo di flussi di messaggi
Riferimenti correlati
Nodi integrati
Nodi definiti dall'utente
Intestazione MQRFH2
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac18520_