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.

Impostare la serie di caratteri e la codifica di MQXQH nei campi 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).
Utilizzo: un messaggio che si trova su una coda di trasmissione ha due descrittori di messaggi:
  • 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 MsgDesc della 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 MsgDesc della 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 Encoding nel 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).
Campi nel descrittore del messaggio incorporato: i campi nel descrittore del messaggio incorporato hanno gli stessi valori di quelli del parametro MsgDesc della chiamata MQPUT o MQPUT1 , ad eccezione di quanto segue:
  • Il campo Version ha sempre il valore MQMD_VERSION_1.
  • Se il campo Priority ha il valore MQPRI_PRIORITY_AS_Q_DEF, viene sostituito dal valore dell'attributo DefPriority della coda.
  • Se il campo Persistence ha il valore MQPER_PERSISTENCE_AS_Q_DEF, viene sostituito dal valore dell'attributo DefPersistence della coda.
  • Se il campo MsgId ha il valore MQMI_NONE o l'opzione MQPMO_NEW_MSG_ID è stata specificata oppure il messaggio è un messaggio di elenco di distribuzione, MsgId viene 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 MsgId in 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, CorrelId viene 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:
    • AccountingToken
    • ApplIdentityData
    • ApplOriginData
    • PutApplName
    • PutApplType
    • PutDate
    • PutTime
    • UserIdentifier
  • 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.
Inserimento di messaggi sulle code remote: quando un'applicazione inserisce un messaggio su una coda remota (specificando direttamente il nome della coda remota o utilizzando una definizione locale della coda remota), il gestore code locale:
  • 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.