Messaggi
Un messaggio Enterprise Message Service (EMS), ad esempio un messaggio JMS, contiene tre parti separate: intestazione, proprietà e corpo. L'intestazione è l'unica parte obbligatoria di un messaggio EMS. In questo argomento viene illustrata la modalità di gestione dei messaggi nell'adapter Microsoft BizTalk per TIBCO Enterprise Message Service.
Nota
Per impostare o recuperare un campo di intestazione,ad esempio impostare la priorità del messaggio o l'ID correlazione, oppure una proprietà del messaggio dall'orchestrazione, è necessario aggiungere un riferimento al Microsoft.BizTalk.Adapters.TIBCOEMSProperties.dll nel progetto usando Esplora soluzioni.
L'intestazione del messaggio include una serie di campi predefiniti contenenti valori. I valori che è o non è possibile impostare nell'intestazione sono regolati dall'adapter BizTalk per TIBCO Enterprise Message Service. Se si tenta di impostare un valore di sola lettura, l'adattatore reindirizza o imposta il valore nella sezione Proprietà{} .
Nell'esempio seguente si noti che Properties= { Destination={String:Queue[Q2]} }. Properties
è una proprietà che contiene una stringa e il contenuto della stringa è Q2. Ciò è diverso da quanto previsto per la sezione Destination; contiene infatti stringhe di valori che vengono impostati e che non potrebbero essere specificati altrove, per cui l'adapter li mantiene in questa sezione.
La ReplyTo
proprietà può essere impostata nell'orchestrazione per indicare a un consumer finale dove inviare una risposta. EMS imposta la Destination
proprietà quando il messaggio viene ricevuto da TIBCOEMS. La seconda proprietà è di sola lettura nell'orchestrazione che riceve il messaggio di TIBCOEMS e non può essere modificata nell'orchestrazione.
Ad esempio, un'orchestrazione non può inviare messaggi e impostare dinamicamente la destinazione al suo interno. Il valore di Destination è impostato dalla porta a cui viene trasmesso il messaggio.
Se si desidera inviare i messaggi a code diverse, è necessario creare porte di trasmissione per ognuna di esse. L'orchestrazione può quindi stabilire a quale porta assegnare il messaggio.
Nell'esempio di messaggio seguente, Destination= {Queue[Q1]}
è di sola lettura. Questo valore viene impostato da TIBCOEMS quando il server riceve il messaggio. Il valore di Destination, Q1, deriva dalle proprietà del trasporto.
TextMessage={
Header={ MessageID={ID:EMS-SERVER.824437A58B11C75F4:1}
Destination={Queue[Q1]}
' This is READONLY. It gets set by the server when the
' message is received by the server (EMS). It is set in the
' Transport Properties when you specify that you want to
' listen for messages on Q1.
ReplyTo={}
DeliveryMode={Persistent}
Redelivered={False}
CorrelationID={}
MsgType={}
Timestamp={12/1/2005 11:59:01 PM}
Expiration={0}
Priority={1} }
Properties={ Destination={String:Queue[Q2]} }
' This is a property that contains a string, and the
' contents of the string is Q2. This has nothing to do with
' the Destination section above – it is just another
' property that is set.
' This is in the schema. The adapter knows what it can and
' cannot set in an EMS header. The values that the adapter
' cannot set are put in the Properties section.
text={<?xml version="1.0" encoding="utf-16"?>
<ns0:Employees xmlns:ns0="http://BizTalk_Server_Project1.Employee">
<Emp Id="Id_0">
Name>Name_0</Name>
</Emp>
</ns0:Employees>
}
L'intestazione contiene una serie di campi predefiniti contenenti valori, che l'adapter alza di livello nel contesto dei messaggi BizTalk Server per l'utilizzo nell'orchestrazione. Le proprietà alzate di livello hanno una definizione identica a quella delle proprietà di intestazione standard indicate dalla specifica JMS e dalle estensioni TIBCO Enterprise Message Service. Tutte le proprietà, ad eccezione di due, sono disponibili per l'orchestrazione ricevuta da EMS: Destination
e ReplyTo
descrivono una destinazione che non può essere mappata correttamente per l'uso in un'orchestrazione come singola proprietà.
L'adapter BizTalk per TIBCO EMS mappa la proprietà TIBCOEMS a un tipo di stringa e usa la rappresentazione di stringa Destination. L'aspetto è simile StaticQueue[queuename]
a o StatisTopic[topicname]
. L'orchestrazione può impostare il valore per ReplyTo
e l'adattatore lo sostituisce con un oggetto di destinazione valido nell'intestazione.
L'adapter fornisce un assembly di schema e di riferimento in cui sono descritte tutte le proprietà delle intestazioni TIBCO EMS utilizzabili dalle orchestrazioni. Queste proprietà possono essere usate per filtrare i messaggi in arrivo o per inserire aggiunte nel messaggio in uscita. Le regole che governano il filtro delle orchestrazioni sono diverse da quelle del selettore di messaggi per il server EMS. Ad esempio, le orchestrazioni possono filtrare in base alla TibcoEMS.ReplyTo
proprietà o TibcoEMS.Destination
, ma non è disponibile alcun supporto nella specifica JMS per consentire il selettore di messaggi in questa stessa proprietà.
Quando vengono definite dall'orchestrazione, queste proprietà vengono incluse nelle proprietà di intestazione del messaggio JMS. Il alternativa, quando viene ricevuto il messaggio EMS, queste proprietà di intestazione vengono copiate nel contesto dei messaggi BizTalk Server.
Quando una proprietà corrisponde alla configurazione della porta, il valore della proprietà sul messaggio ha la precedenza sulla configurazione della porta. Se ad esempio la priorità è impostata su 4 nella porta ma quella del messaggio viene impostata su 9 nella logica dell'orchestrazione, il messaggio viene ricevuto da TIBCO EMS con priorità 9.
Nella tabella seguente viene descritto l'utilizzo di ogni proprietà nell'adapter BizTalk per TIBCO Enterprise Message Service.
Nome | Tipo | Descrizione |
---|---|---|
TibcoEMS.MessageID | string | Le chiamate inviate assegnano un ID univoco a ogni messaggio e lo registrano nell'intestazione. Tutti i valori di ID messaggio iniziano con un prefisso di tre caratteri (riservato a tale scopo). Di sola lettura. La modifica del valore non ha effetti sul messaggio. |
TibcoEMS.Timestamp | long | Le chiamate inviate registrano un timestamp UTC nell'intestazione che indica l'ora approssimativa in cui il server ha accettato il messaggio. Il valore è espresso in millisecondi a partire dal 1° gennaio 1970 Di sola lettura. La modifica del valore non ha effetti sul messaggio. |
TibcoEMS.Redelivered | boolean | Il server imposta l'intestazione per indicare se un messaggio può essere o meno un duplicato di un messaggio recapitato in precedenza: - false: il server non ha tentato in precedenza di recapitare il messaggio al consumer. - true: è probabile, ma non garantito, che il server abbia tentato in precedenza di recapitare questo messaggio al consumer, ma il consumer non ha restituito un acknowledgement tempestivo. Di sola lettura. La modifica del valore non ha effetti sul messaggio. |
TibcoEMS.Destination | string | Le chiamate inviate registrano la destinazione (coda o argomento) del messaggio in questa intestazione. Il formato è adattato da una destinazione a una stringa ed è descritto in precedenza. Di sola lettura. La modifica del valore non ha effetti sul messaggio. |
TibcoEMS.DeliveryMode | string | Ha due valori possibili: PERSISTENT e NON-PERSISTENT. Il valore predefinito è la modalità PERSISTENT. L'adapter attende un riconoscimento dal server EMS prima di riconoscere il messaggio inviato a BizTalk Server. Questa proprietà di intestazione ed elemento di configurazione della porta controlla il tempo richiesto a EMS per inviare il riconoscimento all'adapter e controllare l'affidabilità della trasmissione del messaggio. Utilizzo della modalità di recapito PERSISTENT: il server EMS attende finché il messaggio non è stato reso persistente nel server EMS. Questa azione garantisce che il messaggio è arrivato nella coda. Quando si usa il recapito in modalità PERSISTENT, tenere presente quanto segue: Quanto più grandi sono i messaggi, tanto più lungo è il tempo richiesto a BizTalk Server per considerarli come inviati. Utilizzo della modalità NON-PERSISTENT: il server EMS restituisce il riconoscimento prima di rendere persistente il messaggio. Se si verifica un errore nel server EMS, il messaggio può andare perso quando viene considerato correttamente inviato da BizTalk Server. |
TibcoEMS.Expiration | long | Intervallo di tempo prima della scadenza del messaggio. Se l'impostazione è 0, il messaggio non scade. L'intervallo è specificato in millisecondi. |
TibcoEMS.Priority | INT | Usa una classificazione numerica, compresa tra 0 e 9, per definire la priorità del messaggio come normale o alta. A valori più alti corrispondono priorità più elevate. |
TibcoEMS.CorrolationID | string | Può essere usata per collegare messaggi, ad esempio un messaggio di risposta a un messaggio di richiesta. In genere si tratta dello stesso valore di EMS.JMSMessageID . Viene in genere utilizzato insieme alla EMS.JMSReplyTo proprietà . |
TibcoEMS.ReplyTo | string | Destinazione a cui deve essere inviata la risposta di un messaggio. Il formato è identico a EMS.JMSDestination quello e anche la configurazione della porta. |
TibcoEMS.Type | string | Non descrive il tipo di messaggio (testo, byte, stringa e così via). Alcuni provider JMS usano un repository di messaggi per archiviare le definizioni dei tipi di messaggio. I programmi client possono archiviare un valore in questo campo per fare riferimento a una definizione nel repository. Anche se supportata, questa intestazione non viene usata in EMS. La specifica JMS non definisce un repository standard di definizioni di messaggio né i criteri di denominazione per le definizioni dei tipi di messaggio. Alcuni provider richiedono le definizioni dei tipi di messaggio per ogni messaggio dell'applicazione. Per garantire compatibilità con tali provider, i programmi client possono impostare questa intestazione anche se non viene usata dall'applicazione client. Per garantire la portabilità, i client possono impostare questa intestazione con valori simbolici, anziché letterali, e configurarli in base al repository del provider. |
L'integratore può definire un insieme di proprietà da alzare di livello nel contesto dei messaggi BizTalk, che possono quindi essere aggiunte alla parte proprietà del messaggi JMS. L'integratore definisce con attenzione il tipo di proprietà durante la creazione dello schema. Se il valore della proprietà viene usato in un selettore messaggi, determinate operazioni sono valide a seconda del tipo di proprietà. Ad esempio, se viene usato un selettore di messaggi myMessageProperty > 5 , la proprietà deve essere definita come valore intero e l'adapter inserisce il valore nel messaggio come valore intero. Affinché le proprietà possano essere alzate di livello, i relativi nomi devono iniziare con EMSX e inoltre non devono essere uguali a quelli delle proprietà predefinite.
L'adapter BizTalk per TIBCO Enterprise Message Service prevede uno schema e un assembly che dichiarano le proprietà specifiche di EMS e JMS che possono apparire in questa sezione. Tali proprietà possono essere ampliate per includere eventuali omissioni. Tutte le proprietà EMSX a cui viene fatto riferimento nel contesto del messaggio vengono inserite nella sezione di proprietà del messaggio EMS. Per altre informazioni, vedere la guida dell'utente di TIBCO EMS.
EMS supporta tutti i messaggi enumerati nella specifica JMS: testo, byte, flusso, mappa e oggetto. L'adapter BizTalk per TIBCO EMS supporta solo il tipo di messaggio di testo.
JMS non richiede che i messaggi di tipo testo contengano corpi in formato XML. L'adattatore non elabora il corpo del messaggio; viene fornito per BizTalk Server come ricevuto. Pertanto, i messaggi inviati a BizTalk dall'adapter potrebbero non essere sempre analizzati come dati XML.
I messaggi possono essere resi persistenti nel server EMS per garantire che il recapito venga eseguito una sola volta al sottoscrittore; tuttavia, ciò può avere un impatto significativo sulle prestazioni dell'adapter. I messaggi inviati vengono archiviati da EMS nell'archivio locale prima dell'invio del riconoscimento della ricezione all'adapter. È possibile impostare questa proprietà per ogni singolo messaggio nell'orchestrazione o per tutti i messaggi elaborati dalla porta.
Dal punto di vista della ricezione, l'adapter può perdere dei messaggi quando non ha sottoscritto l'argomento. I messaggi inviati ad argomenti in cui non sono presenti sottoscrizioni non vengono resi persistenti da EMS. L'adapter richiede un meccanismo per ricevere l'invio di messaggi anche quando non ha effettuato la sottoscrizione; tuttavia, analogamente all'utilizzo di messaggi persistenti, ciò può avere un impatto significativo sulle prestazioni di EMS e non è sempre un'operazione necessaria.
Nota
Esiste un meccanismo per la ricezione dal punto di vista di EMS ma non viene implementato né è in realtà consigliabile. Questo problema riguarda solo l'argomento, mentre non ha effetto sulle code. Un argomento viene in genere usato per dati specifici dell'ora, ad esempio quotazioni azionarie. Se il prezzo di un'azione viene perso, è certo che verrà inviato di nuovo in seguito.
Per questi motivi, la configurazione della porta consente di abilitare o disabilitare la persistenza dei messaggi nel server EMS.
L'adapter BizTalk per TIBCO Enterprise Message Service riconosce sempre la ricezione di un messaggio che sia stato correttamente inviato a BizTalk Server. Ciò significa che i messaggi non riconosciuti vengono inviati nuovamente da EMS all'adapter. L'adapter non è in grado di controllare il numero di volte in cui l'invio del messaggio viene ripetuto da EMS, perché si tratta di una configurazione della destinazione; tuttavia, l'adapter può controllare se il messaggio viene o meno inviato al MessageBox. Il server EMS controlla il numero di volte in cui un messaggio in errore viene inviato a una coda.
Per i messaggi che vengono ridistribuiti, il server EMS imposta la JMSRedelivered
proprietà su True e incrementa .JMSXDeliveryCount
Entrambi i valori delle proprietà sono disponibili per l'orchestrazione. Non è possibile spostare un messaggio nella coda dei messaggi non recapitati di EMS senza recapitarlo in tale posizione. In questo caso, le proprietà dei messaggi verrebbero modificate.
Quando un messaggio raggiunge il numero massimo configurato di ripetizioni del recapito, il server EMS determina se deve essere eliminato oppure inserito nella coda $sys.undelivered. Il server EMS prende la decisione in base JMS_TIBCO_PRESERVE_UNDELIVERED
alla proprietà; se True, il messaggio passa alla coda non completata o viene eliminata. Questa proprietà può essere impostata nell'orchestrazione prima dell'invio del messaggio. Dopo il recapito, la proprietà del messaggio non può essere modificata. I messaggi inviati a EMS vengono riconosciuti in BizTalk Server quando l'esito è positivo. Se si verifica un errore neIl'invio a EMS, vengono sospesi e contrassegnati come ripetibili.