Panoramica per MQXQH
Disponibilità: tutti i sistemi IBM® MQ e client IBM MQ .
Scopo: La struttura MQXQH descrive le informazioni che hanno come prefisso i dati dei messaggi dell'applicazione quando si trovano nelle code di trasmissione. Una coda di trasmissione è un tipo speciale di coda locale che contiene temporaneamente i messaggi destinati alle code remote (ossia, destinati alle code che non appartengono al gestore code locale). Una coda di trasmissione è denotata dall'attributo coda Usage con il valore MQUS_TRANSMISSION.
Nome formato: MQFMT_XMIT_Q_HEADER.
Serie di caratteri e codifica: i dati in MQXOH devono essere nella serie di caratteri fornita dall'attributo gestore code CodedCharSetId e dalla codifica del gestore code locale fornita da MQENC_NATIVE.
CodedCharSetId e Encoding in:- MQMD separato (se la struttura MQXQH si trova all'inizio dei dati del messaggio) oppure
- La struttura dell'intestazione che precede la struttura MQXQH (tutti gli altri casi).
- Un descrittore di messaggi viene archiviato separatamente dai dati del messaggio; viene denominato descrittore di messaggi separatoe viene generato dal gestore code quando il messaggio viene inserito nella coda di trasmissione. Alcuni dei campi nel descrittore del messaggio separato vengono copiati dal descrittore del messaggio fornito dall'applicazione nella chiamata MQPUT o MQPUT1 .
Il descrittore del messaggio separato è quello restituito all'applicazione nel parametro
MsgDescdella chiamata MQGET quando il messaggio viene rimosso dalla coda di trasmissione. - Un secondo descrittore del messaggio viene memorizzato all'interno della struttura MQXQH come parte dei dati del messaggio; viene denominato descrittore del messaggio integratoed è una copia del descrittore del messaggio fornito dall'applicazione nella chiamata MQPUT o MQPUT1 (con variazioni minori).Il descrittore del messaggio incorporato è sempre un MQMD version-1 . Se il messaggio inserito dall'applicazione ha valori non predefiniti per uno o più campi version-2 in MQMD, una struttura MQMDE segue MQXQH ed è a sua volta seguita dai dati del messaggio dell'applicazione (se presenti). MQMDE è:
- Generato dal gestore code (se l'applicazione utilizza un MQMD version-2 per inserire il messaggio) oppure
- Già presente all'inizio dei dati del messaggio dell'applicazione (se l'applicazione utilizza un MQMD version-1 per inserire il messaggio).
Il descrittore del messaggio incorporato è quello restituito all'applicazione nel parametro
MsgDescdella chiamata MQGET quando il messaggio viene rimosso dalla coda di destinazione finale.
Campi nel descrittore del messaggio separato: i campi nel descrittore del messaggio separato sono impostati dal gestore code come mostrato. Se il gestore code non supporta l'MQMD version-2 , viene utilizzato un MQMD version-1 senza perdita di funzione.
| Campo in MQMD separato | Valore utilizzato |
|---|---|
StrucId |
ID_STRUC_MQMD |
Version |
MQMD_VERSION_2 |
Report |
Copiato dal descrittore del messaggio integrato, ma con i bit identificati da MQRO_ACCEPT_UNSUP_IF_XMIT_MASK impostato su zero. Ciò impedisce che un messaggio di report COA o COD venga generato quando un messaggio viene inserito o rimosso da una coda di trasmissione. |
MsgType |
Copiato dal descrittore del messaggio incorporato. |
Expiry |
Copiato dal descrittore del messaggio incorporato. |
Feedback |
Copiato dal descrittore del messaggio incorporato. |
Encoding |
MQENC_NATIVE (vedere nota) |
CodedCharSetId |
Attributo CodedCharSetId del gestore code. |
Format |
MQFMT_XMIT_Q_HEADER |
Priority |
Copiato dal descrittore del messaggio incorporato. |
Persistence |
Copiato dal descrittore del messaggio incorporato. |
MsgId |
Il gestore code genera un nuovo valore. Questo identificativo del messaggio è diverso da MsgId che il gestore code potrebbe aver generato per il descrittore del messaggio integrato descritto in precedenza. |
CorrelId |
Il MsgId dal descrittore del messaggio incorporato. Per i messaggi inseriti nel SISTEMA SYSTEM.CLUSTER.TRANSMIT.QUEUE, CorrelId è riservato per uso interno. |
BackoutCount |
0 |
ReplyToQ |
Copiato dal descrittore del messaggio incorporato. |
ReplyToQMgr |
Copiato dal descrittore del messaggio incorporato. |
UserIdentifier |
Copiato dal descrittore del messaggio incorporato. |
AccountingToken |
Copiato dal descrittore del messaggio incorporato. Per i messaggi inseriti nel SISTEMA SYSTEM.CLUSTER.TRANSMIT.QUEUE, AccountingToken è riservato per uso interno. |
ApplIdentityData |
Copiato dal descrittore del messaggio incorporato. |
PutApplType |
Gestore code MQAT |
PutApplName |
I primi 28 byte del nome gestore code. |
PutDate |
Data in cui il messaggio è stato inserito nella coda di trasmissione. |
PutTime |
L'ora in cui il messaggio è stato inserito nella coda di trasmissione. |
ApplOriginData |
Spazi |
GroupId |
MQGI_NONE |
MsgSeqNumber |
1 |
Offset |
0 |
MsgFlags |
MQMF_NONE |
OriginalLength |
MQOL_NON DEFINITO |
- Su Windows, il valore di MQENC_NATIVE per Micro Focus COBOL è diverso dal valore per C. Il valore nel campo
Encodingnel descrittore del messaggio separato è sempre il valore per C in questi ambienti; questo valore è 546 in decimale. Inoltre, i campi interi nella struttura MQXQH sono nella codifica che corrisponde a questo valore (la codifica Intel nativa).
MsgDesc della chiamata MQPUT o MQPUT1 , ad eccezione di quanto segue:- Il campo
Versionha sempre il valore MQMD_VERSION_1. - Se il campo
Priorityha il valore MQPRI_PRIORITY_AS_Q_DEF, viene sostituito dal valore dell'attributoDefPrioritydella coda. - Se il campo
Persistenceha il valore MQPER_PERSISTENCE_AS_Q_DEF, viene sostituito dal valore dell'attributoDefPersistencedella coda. - Se il campo
MsgIdha il valore MQMI_NONE o l'opzione MQPMO_NEW_MSG_ID è stata specificata oppure il messaggio è un messaggio di elenco di distribuzione,MsgIdviene sostituito da un nuovo identificativo del messaggio generato dal gestore code.Quando un messaggio dell'elenco di distribuzione viene suddiviso in messaggi dell'elenco di distribuzione più piccoli posizionati su code di trasmissione differenti, il campo
MsgIdin ciascuno dei nuovi descrittori di messaggi incorporati è uguale a quello del messaggio dell'elenco di distribuzione originale. - Se è stata specificata l'opzione MQPMO_NEW_CORREL_ID,
CorrelIdviene sostituito da un nuovo identificativo di correlazione generato dal gestore code. - I campi di contesto sono impostati come indicato dalle opzioni di MQPMO_ * _CONTEXT specificate nel parametro
PutMsgOpts; i campi di contesto sono:AccountingTokenApplIdentityDataApplOriginDataPutApplNamePutApplTypePutDatePutTimeUserIdentifier
- I campi version-2 (se presenti) vengono rimossi da MQMD e spostati in una struttura MQMDE, se uno o più campi version-2 hanno un valore non predefinito.
- Crea una struttura MQXQH contenente il descrittore del messaggio incorporato
- Accoda un MQMDE se ne è necessario uno e non è già presente
- Accoda i dati del messaggio dell'applicazione
- Inserisce il messaggio in una coda di trasmissione appropriata
Inserimento di messaggi direttamente sulle code di trasmissione: un'applicazione può anche inserire un messaggio direttamente su una coda di trasmissione. In questo caso, l'applicazione deve anteporre ai dati del messaggio dell'applicazione una struttura MQXQH e inizializzare i campi con i valori appropriati. Inoltre, il campo Format nel parametro MsgDesc della chiamata MQPUT o MQPUT1 deve avere il valore MQFMT_XMIT_Q_HEADER.
I dati carattere nella struttura MQXQH creati dall'applicazione devono trovarsi nella serie di caratteri del gestore code locale (definito dall'attributo gestore code CodedCharSetId ) e i dati interi devono essere nella codifica della macchina nativa. Inoltre, i dati carattere nella struttura MQXQH devono essere riempiti con spazi vuoti fino alla lunghezza definita del campo; i dati non devono essere terminati in modo prematuro utilizzando un carattere null, poiché il gestore code non converte i caratteri null e successivi in spazi vuoti nella struttura MQXQH.
Tuttavia, il gestore code non controlla che sia presente una struttura MQXQH o che siano stati specificati valori validi per i campi.
Le applicazioni non devono inserire i relativi messaggi direttamente nel SISTEMA SYSTEM.CLUSTER.TRANSMIT.QUEUE.
Richiamo di messaggi dalle code di trasmissione: le applicazioni che ricevono messaggi da una coda di trasmissione devono elaborare le informazioni nella struttura MQXQH in modo appropriato. La presenza della struttura di MQXQH all'inizio dei dati del messaggio dell'applicazione è indicata dal valore MQFMT_XMIT_Q_HEADER restituito nel campo Format nel parametro MsgDesc della chiamata MQGET. I valori restituiti nei campi CodedCharSetId e Encoding nel parametro MsgDesc indicano la serie di caratteri e la codifica dei dati carattere e numero intero nella struttura MQXQH. La serie di caratteri e la codifica dei dati del messaggio dell'applicazione sono definiti dai campi CodedCharSetId e Encoding nel descrittore del messaggio incorporato.