Informazioni sull'esempio Mappa del messaggio

Le mappe di esempio illustrano modelli di progettazione che implementano una varietà di scenari di brokering. La progettazione degli strumenti per la mappa del messaggio consente ai modelli di progettazione di essere combinati come modelli composti. Questo fa sì che le mappe del messaggio per scenari complessi vengano create assemblando insieme modelli di progettazione per scenari più semplici. I file di esempio non sono destinati alla distribuzione.

Gestione di assiemi completi di messaggio

I file di esempio per l'elaborazione di assiemi completi di messaggio si trovano nella cartella message_assembly nel progetto Message Map Sample Message Flows.

Un assieme di messaggio è la combinazione di tutte le intestazioni e del contenuto o del payload del messaggio. I nodi Mapping, DataInsert, DataUpdate, DataDelete e Extract in un flusso di messaggi gestiscono sempre un assieme completo di messaggio. Questo significa che la mappatura per questi nodi mostra sempre un modello assieme di messaggio come origini e destinazioni di una mappa.

Vi sono due modelli di assieme di messaggio in WebSphere Message Broker: il modello Proprietà semplificato ed il modello Intestazioni completo. La scelta dell'uno o dell'altro è una questione di selezione del modello che corrisponde alle esigenze del proprio scenario. La figura a sinistra illustra il modello Proprietà di un assieme di messaggio; quella a destra illustra il modello di assieme di messaggio Intestazioni.

Assieme Proprietà

Assieme Intestazioni

Un assieme di messaggio WebSphere Message Broker include quattro elementi, numerati nella figura:

  1. la cartella LocalEnvironment;
  2. la cartella Proprietà;
  3. gruppo Message Headers del livello trasporto;
  4. il payload o il contenuto del messaggio.

E' possibile configurare un flusso di messaggi in modo che esegua un salto di tipo Route to Label dopo uno dei nodi Mapping; è utile in scenari di instradamento basato sul contenuto all'interno del flusso.

In questo esempio vengono implementati tre scenari comuni:

In tutti i casi, il contenuto o il payload del messaggio si presenta come ultimo elemento nell'assieme di messaggio.

Tornare all'inizio.

Controllo dell'elaborazione del flusso di messaggi con una mappa

Utilizzare l'elemento labelName dell'assieme di messaggio per controllare l'instradamento di un messaggio dopo un nodo Mapping. Questo è utile in scenari dove si desidera selezionare i successivi nodi del flusso di messaggi per continuare l'elaborazione da una mappa.

La seguente figura mostra il file del flusso di messaggi di esempio RouteToLabelUsingMap.msgflow configurato con un nodo Mapping, un nodo Route To Label e diversi nodi Label di destinazione. Le etichette di destinazione dei nodi Label sono configurate per essere uguali ai rispettivi nomi.

Flusso di messaggi Route To Label

Al fine di selezionare quale nodo Label elaborerà il messaggio di output, la mappa deve specificare la proprietà Nome etichetta del nodo Label. Il file di mappa di esempio SetLabelNodeLabelName.msgmap gestisce questa situazione utilizzando una riga if con 2 conditions ed una riga else:

Mappa del messaggio Route To Label

In questo esempio:

Tornare all'inizio.

Copia di tutte le intestazioni

Spesso una mappa si concentra esclusivamente sul contenuto di un messaggio. In questo scenario, tutte le intestazioni devono essere copiate senza modifiche dalla mappa.

Utilizzare il modello Proprietà per copiare tutte le intestazioni senza modifiche. Quando si seleziona il modello assieme di messaggio Proprietà semplificato, vengono copiate tutte le intestazioni del messaggio ad eccezione della cartella Proprietà, seguendo l'ordine e senza modifiche.

Una volta creata una mappa del messaggio Proprietà, associare l'elemento complesso $source/Properties all'elemento complesso $target/Properties. Questo farà sì che la cartella Proprietà venga copiata senza modifiche dall'origine alla destinazione, insieme a tutte le altre intestazioni anch'esse invariate.

L'immagine riportata sotto mostra il file di esempio CopyAllHeaders.msgmap configurato in modo da copiare tutte le intestazioni (inclusa Proprietà) senza modifiche.

Copia di tutte le intestazioni

Tornare all'inizio.

Mappatura delle proprietà

Il modello Proprietà abilita molti scenari broker senza dover affrontare la complessità di dover mappare diverse intestazioni. Il modello Proprietà estrae la maggior parte degli attributi di intestazione importanti per MQ Series e per il programma di analisi MRM e li presenta in un singolo pacchetto. In aggiunta allo scenario Copia di tutte le intestazioni, è opportuno utilizzare il modello Proprietà in situazioni in cui MQ Series è il livello di trasporto ed MRM è il programma di analisi del contenuto del messaggio. Questi attributi possono essere suddivisi nelle seguenti categorie:

Modello Proprietà

  1. Formato fisico del messaggio
  2. "Qualità del servizio" del livello di trasporto
  3. Informazioni sul percorso di risposta
  4. Argomento pubblicazione/sottoscrizione

Un punto da tenere a mente è che tutti i campi in un modello Proprietà devono essere impostati. Se è necessario impostare qualche campo singolo, ad esempio, MessageFormat per selezionare il wire format del messaggio di output, si devono impostare o copiare anche gli altri valori nella cartella Proprietà. Qualsiasi campo non esplicitamente impostato non verrà copiato nel messaggio di output.

Tornare all'inizio.

Mappatura delle intestazioni

Il modello Intestazioni offre la capacità di mappare intestazioni selezionate oltre alle proprietà. Si noti che il modello Intestazioni non supporta la capacità di "copia di tutte le intestazioni": qualsiasi intestazione che non sia esplicitamente mappata non verrà creata come parte della destinazione.

Le Intestazioni sono suddivise in categorie come intestazioni MQMD, MQ, HTTP e JMS. Utilizzare il modello Intestazioni per scenari JMS, SOAP su JMS e HTTP. Utilizzare il modello Intestazioni per scenari MQ quando il modello Proprietà non fornisce il controllo richiesto.

  1. Il raggruppamento MQ include le intestazioni MQMD e MQRFH2. Si noti che questa è la definizione di struttura dell'intestazione; nel runtime una mappa gestisce automaticamente programmi di analisi origine. Per una destinazione MQRFH2, la mappa seleziona dinamicamente il programma di analisi MQRFH2 in brokers versione 5 ed il programma di analisi MQRFH2C a prestazioni più elevate in brokers versione 6.
    Tutto il downstream ESQL di una mappa del messaggio che mappa l'intestazione MQRFH2 (in opposizione al copiarla utilizzando la funzione di copia di tutte le intestazioni) deve essere configurato con il nome del programma di analisi corretto per questa intestazione.
  2. Il raggruppamento HTTP include tutte le intestazioni standard; altre intestazioni HTTP vengono ignorate. Se è necessario elaborare intestazioni HTTP personalizzate si dovrà configurare un nodo Compute ESQL in modo che chiami la mappa, come descritto di seguito.
  3. Il raggruppamento JMS include le intestazioni JMS standard. Per elaborare versioni personalizzate sarà necessario definire l'intestazione JMS personalizzata in una serie di messaggi e configurare un nodo Compute ESQL in modo che chiami la mappa, come descritto di seguito.
Modello Intestazioni

Tornare all'inizio.

Creazione di più messaggi di output

I file di esempio per scenari con più messaggi di output si trovano nella cartella multiple_output nel progetto Message Map Sample Message Flows.

La regola base per la creazione di più messaggi di output consiste nel dichiarare, in modo implicito o esplicito, più righe $target. Più righe possono essere dichiarate in modo implicito utilizzando una riga for. Tramite una riga for, verranno creati zero o più messaggi di output, uno per elemento origine fornito come origine della riga for. Più messaggi di output possono inoltre essere creati aggiungendo esplicitamente più di una destinazione tramite il menu Aggiungi origini e destinazioni. Ogni destinazione di questo tipo creerà un messaggio di output. E' possibile anche combinare righe for con destinazioni multiple, se ogni elemento in un'origine crea più messaggi di output autonomamente.

Vi sono diversi scenari in cui è utile configurare una mappa del messaggio per l'output di più messaggi. Alcuni di questi scenari sono:

Gli strumenti per la mappa del messaggio rendono facile la creazione di più messaggi di output: è necessario solo specificare più assiemi di messaggio di destinazione o racchiudere un assieme di messaggio di destinazione in una riga for.

Tornare all'inizio.

Creazione di più messaggi di Output per un campo che si ripete

I file di esempio per questo scenario sono ubicati nella cartella multiple_output nel progetto Message Map Sample Message Flows.

Tutto ciò che è necessario fare per creare più messaggi di output per un campo di origine che si ripete è racchiudere l'assieme di messaggio di destinazione in una riga for che opera sull'origine che si ripete.

La mappa del messaggio di esempio repeating_source.msgmap convertirà un campo che si ripete in un assieme di messaggio di origine in un flusso di assiemi di messaggio nel flusso di messaggi che effettua la chiamata. La mappa repeating_source.msgmap racchiude la riga $target in una riga for per creare più assiemi di messaggio di output, uno per input che si ripete. Per ogni assieme, viene copiata la cartella Proprietà, il che significa che viene utilizzata la funzionalità copia di tutte le cartelle. Quindi, in ogni assieme di messaggio di output, viene copiato un singolo rtl:body.

Batch della ripetizione

Tornare all'inizio.

Creazione di più messaggi di output per un messaggio di input multipart

I file di esempio per questo scenario sono ubicati nella cartella multipart_messages nel progetto Message Map Sample Message Flows.

Come per i campi che si ripetono, tutto ciò che è necessario fare per creare più messaggi di output per un messaggio origine multi-part che si ripete è racchiudere l'assieme di messaggio di destinazione in una riga for che opera sulla definizione del messaggio multi-part che si ripete.

La differenza chiave tra un messaggio multi-part ed un campo regolare che si ripete è che il messaggio multi-part è definito da un gruppo di contenuto locale con modello di contenuto open o open-defined (un'estensione brokers allo Schema XML), mentre un campo che si ripete è definito da un elemento.

Piuttosto che introdurre un costrutto di mappa del messaggio differente per un messaggio multi-part, il gruppo di contenuto viene considerato come se il relativo contenuto fosse un elemento wildcard dello schema XML. La creazione di una mappa per un elemento wildcard dello Schema XML richiede l'utilizzo di una mappa secondaria.

Come si vede nell'esempio, elementi wildcard vengono mappati attraverso l'utilizzo di una mappa secondaria specifica per l'elemento. In effetti, l'elemento wildcard o "sconosciuto" viene convertito in un elemento "noto" da una chiamata alla mappa secondaria.

Batch della ripetizione

Tornare all'inizio.

Creazione di più messaggi di output per un input che non si ripete

Il file di esempio per questo scenario è nonrepeating_source.msgmap ubicato nella cartella multiple_output nel progetto Message Map Sample Message Flows.

La tecnica per produrre più messaggi è la stessa indipendentemente dal fatto che l'origine si ripeta o meno. In questo caso, più righe $target vengono dichiarate esplicitamente dalla mappa. Ogni riga target dichiarata creerà un messaggio di output. Negli scenari che si ripetono, gli assiemi multipli erano dichiarati in modo implicito dalle righe for che contenevano gli assiemi di destinazione e creavano un assieme di output per elemento nella riga for.

Batch della ripetizione

Tornare all'inizio.

Ordinamento, raggruppamento o confronto di campi in un messaggio

I file di esempio per questo scenario si trovano nella cartella sorting nel progetto Message Map Sample Message Flows. Vi sono 2 variazioni sul tema:

Ordinamento con chiavi note in anticipo

Ordinamento o raggruppamento quando i valori chiave per l'ordinamento sono noti mentre la creazione della mappa è illustrata dal file sorting.msgmap. Tre possibili valori di campo vengono ordinati in tre messaggi separati utilizzando il modello di progettazione Creazione di più messaggi di output per un input che non si ripete.

Di frequente è necessario calcolare le quantità totali o i conteggi dei record dopo che un singolo messaggio viene convertito in più messaggi. Questa operazione deve essere gestita tramite un secondo passo, nel file total.msgmap. Il flusso di messaggi sort.msgflow illustra come connettere due nodi di mapping per ottenere questo risultato.

Ordinamento con chiavi da un database

Il file di esempio è sorting_dynamic.msgmap. Questo esempio è molto simile ad Ordinamento con chiavi note in anticipo, la differenza cruciale sta nel fatto che la mappa deve andare in un database per ottenere un elenco di chiavi valide. I passi nella mappa sono i seguenti:

Come nell'esempio precedente, questo non è sufficiente per avere un messaggio di output corretto e si dovrà di nuovo chiamare la mappa total.msgmap per calcolare i totali per messaggio di output.

Tornare all'inizio.

Chiamata a una mappa da ESQL

I file di esempio si trovano nella cartella esql_calling_msgmap nel progetto Message Map Sample Message Flows.

Questo esempio mostra come chiamare una mappa da ESQL. La previsione è che gli utenti chiameranno mappe secondarie piuttosto che mappe principali. Una mappa secondaria è una qualsiasi mappa del messaggio destinata ad essere chiamata da un'altra mappa o da ESQL. Si crea una mappa secondaria nella Procedura guidata Nuova mappa del messaggio (File>Nuovo>Mappa del messaggio) selezionando il pallino Questa mappa viene richiamata da un'altra mappa...:

Creazione di una mappa secondaria nella procedura guidata Nuova mappa del messaggio

La firma ESQL prevista per la chiamata a una mappa secondaria è:

	submapName(
		sourcePath1, [sourcePath2, [...]]
		[targetPath, ]
		InputLocalEnvironment [, OutputLocalEnvironment])
	

E' sempre presente almeno un parametro sourcePath; questo rappresenta l'input di messaggistica che sta guidando il nodo del flusso di messaggi. I sourcePath sono variabili REFERENCE ESQL inizializzate per fare riferimento al nodo albero origine prima di chiamare la mappa del messaggio.

targetPath è una variabile REFERENCE ESQL facoltativa che fa riferimento al nodo albero root di destinazione. Deve essere inizializzata prima di chiamare la mappa del messaggio. targetPath è facoltativa e, se una mappa del messaggio non dispone di parametri target, la mappa non creerà alcun output di messaggistica. Questo viene utilizzato per scenari di messaggio al database relazionale, dove le mappe vengono chiamate da nodi Database ESQL.

InputLocalEnvironament e OutputLocalEnvironment sono variabili REFERENCE ESQL inizializzate per i nomi di correlazione al nodo ESQL associato. Le mappe del messaggio sono implementate come procedure ad ambito schema, quindi non possono accedere direttamente ai nomi di correlazione.

Il codice di esempio inizializza i parametri richiesti e chiama la mappa.

Tornare all'inizio.

Utilizzo di una mappa del messaggio in uno scenario Aggregate

I file di esempio si trovano nella cartella esql_calling_msgmap nel progetto Message Map Sample Message Flows.

E' stato implementato il modello di base di una chiamata ESQL ad una mappa. Il codice MODULE ESQL è stato scritto per inizializzare le cartelle Proprietà e Intestazioni, creare i riferimenti necessari e chiamare la mappa.

La mappa costruisce un singolo messaggio di output da tutte le cartelle del nodo Aggregate (Request1, Request2, ecc). Poiché MODULE ESQL si occupa delle proprietà e delle intestazioni, tutto quello che resta da fare è copiare il contenuto di LocalEnvironment.Aggregate.AgregateRequestFolderName nel messaggio di output.

Tornare all'inizio.

Scenari schema XML

Questi scenari di esempio mostrano il modello di progettazione per la conversione di modelli Schema XML che utilizzano wildcard, estensioni e restrizioni di tipo, gruppi di sostituzione e gruppi di modello contenuto in una mappa del messaggio.

Tornare all'inizio.

Elementi wildcard

I file di esempio per l'elaborazione di elementi wildcard e attributi si trovano nella cartella multipart_messages nel progetto Message Map Sample Message Flows.

Gli elementi wildcard si gestiscono chiamando una mappa secondaria. Nella mappa secondaria, il nome dell'elemento è protetto. Per elaborare nomi di elemento differenti dallo stesso wildcard, utilizzare le righe if, condition e else.

L'esempio implementa un semplice scenario di campo che si ripete, ma nel caso leggermente più complesso in cui l'origine che si ripete viene creata come messaggio multipart di brokers. Il messaggio multipart viene gestito come elemento wildcard dagli strumenti della mappa. Gli elementi wildcard vengono gestiti chiamando una mappa secondaria per ottenere il nome corretto dell'elemento.

Nella prima mappa, l'assieme di messaggio di destinazione è contenuto in una riga for. La riga for opera sul messaggio multipart che si ripete contenuto dal singolo messaggio di origine. L'inclusione dell'assieme di destinazione nella riga for indica che assiemi di messaggio completi verranno emessi, uno per messaggio multipart di input nell'origine. La prima mappa del messaggio contiene anche una mappatura per il messaggio wildcard che supporta messaggi multipart. Questa mappatura chiama una mappa secondaria, che deve restituire una definizione completa dell'elemento che wildcard rappresenta.

Messaggio envelope multipart

Nella seconda mappa, si nota che l'elemento del messaggio wildcard è stato vincolato ad essere un elemento rtl:body. In questa mappa secondaria, l'origine e la destinazione sono uguali e l'origine è copiata completamente per creare la destinazione.

Messaggio contenuto multipart

Tornare all'inizio.

Eredità tipo

Il file di esempio per questo scenario è type_to_substitutiongroup.msgmap ubicato nella cartella xmlschema nel progetto Message Map Sample Message Flows.

Nell'editor della mappa del messaggio, 'cartelle' speciali dell'albero di origine e destinazione vengono utilizzate per mostrare le combinazioni di tipi valide. Il nome della cartella è specializzazioni per tipo base. All'interno della cartella vengono visualizzati gli elementi combinati con ogni derivazione non astratta dal tipo base. Ognuna di queste rappresentazioni di elementi concreti contiene il contenuto completo; con tutti i possibili attributi seguiti da tutti gli elementi validi. Essenzialmente, l'albero mostra gli elementi XML differenti che il modello di schema XML descrive.

Nella mappa del messaggio di esempio, l'origine è descritta utilizzando un modello di schema XML che consente le alternative extensionType1 ed extensionType2. Ognuna di queste alternative può essere mappata singolarmente alla destinazione.

Le gerarchie delle estensioni di tipo possono essere combinate con modelli di scelta, gruppi di sostituzione, ecc., anche se l'esempio evita tale complicazione.

Tornare all'inizio.

Gruppi di sostituzione

Il file di esempio per questo scenario è type_to_substitutiongroup.msgmap ubicato nella cartella xmlschema nel progetto Message Map Sample Message Flows.

Nell'editor della mappa del messaggio, 'cartelle' speciali dell'albero di origine e destinazione vengono utilizzate per mostrare gli elementi validi che utilizzano le combinazioni di gruppi di sostituzione. Il nome della cartella è sostituzioni per elemento di testa. All'interno della cartella vengono visualizzati i nomi di elemento differenti combinati con ogni derivazione non astratta per il tipo base. Ognuna di queste rappresentazioni di elementi concreti contiene il contenuto completo; con tutti i possibili attributi seguiti da tutti gli elementi validi. Essenzialmente, l'albero mostra gli elementi XML differenti che il modello di schema XML descrive.

Nella mappa del messaggio di esempio, la destinazione viene descritta utilizzando un modello di schema XML che consente le alternative Substitute1 e Substitute2 all'elemento HeadElement astratto. Ognuna di queste alternative può essere mappata singolarmente all'origine.

I gruppi di sostituzione possono essere combinati con le gerarchie di tipo, anche se l'esempio evita questa complicazione.

Tornare all'inizio.

Gruppi modello di ripetizione

I file di esempio per questo scenario si trovano nella cartella modelgroups nel progetto Message Map Sample Message Flows.

Tornare all'inizio.

icona Pagina principale   Torna alla pagina home dell'esempio