MQPSXP-Structure de données de l'exit de publication

La structure MQPSXP décrit les informations qui sont transmises à et renvoyées par l'exit de publication.

Le tableau 1 résume les champs de la structure :
Tableau 1. Zones dans MQPSXP
Zone Description
StrucID Identificateur de structure
Version Numéro de version de structure
ExitId Type d'exit appelé
ExitReason Raison de l'appel de l'exit
ExitResponse Réponse de l'exit
ExitResponse2 Réponse secondaire de l'exit
Feedback Code retour
ExitUserArea Quitter la zone utilisateur
ExitData Données d'exit
QMgrName Nom du gestionnaire de files d'attente local
Hconn Descripteur de connexion
MsgDescPtr Adresse du descripteur de message (MQMD)
MsgHandle Traitement des propriétés de message (MQHMSG)
MsgInPtr Adresse du message d'entrée
MsgInLength Longueur du message d'entrée
MsgOutPtr Adresse du message de sortie
MsgOutLength Longueur du message de sortie
pEntryPoints Adresse de la structure MQIEP

Zones

StrucID (MQCHAR4)
StrucID est l'identificateur de structure. La valeur est la suivante:
MQPSXP_STRUCID
MQPSXP_STRUCID est l'identificateur de la structure des paramètres d'exit de publication. Pour le langage de programmation C, la constante MQPSXP_STRUC_ID_ARRAY est également définie ; elle a la même valeur que MQPSXP_STRUC_ID, mais il s'agit d'un tableau de caractères à la place d'une chaîne.

StrucID est une zone d'entrée de l'exit.

Version (MQLONG)
Version est le numéro de version de la structure. La valeur est la suivante:
MQPSXP_VERSION_1
MQPSXP_VERSION_1 est la structure des paramètres d'exit de publication version 1. La constante MQPSXP_CURRENT_VERSION est également définie avec la même valeur.

Version est une zone d'entrée de l'exit.

ExitId (MQLONG)
ExitId est le type d'exit appelé. La valeur est la suivante:
MQXT_PUBLISH_EXIT
Exit de publication.

ExitId est une zone d'entrée de l'exit.

ExitReason (MQLONG)
ExitReason est la raison de l'appel de l'exit. Les valeurs possibles sont les suivantes:
MQXR_INIT
L'exit de cette connexion est appelé pour l'initialisation. L'exit peut acquérir et initialiser les ressources dont il a besoin ; par exemple, la mémoire principale.
MQXR_TERM
L'exit de cette connexion est appelé car l'exit est sur le point d'être arrêté. L'exit doit libérer toutes les ressources qu'il a acquises depuis qu'il a été initialisé ; par exemple, la mémoire principale.
MQXR_PUBLICATION
L'exit est appelé par le gestionnaire de files d'attente avant de placer une publication dans une file d'attente de messages d'un abonné. L'exit peut modifier le message, ne pas le placer dans la file d'attente ou arrêter la publication.

ExitReason est une zone d'entrée de l'exit.

ExitResponse (MQLONG)
Définissez ExitResponse dans l'exit pour indiquer comment le traitement doit continuer. ExitResponse est l'une des valeurs suivantes:
MQXCC_OK
Définissez MQXCC_OK pour poursuivre le traitement normalement. Définissez MQXCC_OK en réponse à toute valeur de ExitReason.
Si ExitReason a la valeur MQXR_PUBLICATION, les zones DestinationQName et DestinationQMgrName de la structure MQSBC identifient la destination à laquelle le message est envoyé.
MQXCC_FAILED
Définissez MQXCC_FAILED pour arrêter l'opération de publication. Le code achèvement MQCC_FAILED et le code anomalie 2557 (09FD) (RC2557): MQRC_PUBLISH_EXIT_ERROR sont définis en cas de retour de l'exit.
MQXCC_SUPPRESS_FUNCTION
Définissez MQXCC_SUPPRESS_FUNCTION pour arrêter le traitement normal du message. Définissez MQXCC_SUPPRESS_FUNCTION uniquement si ExitReason a la valeur MQXR_PUBLICATION.
Le message continue d'être traité par le gestionnaire de files d'attente en fonction de l'option MQRO_DISCARD_MSG dans la zone Report du descripteur de message du message.
  • Si l'option MQRO_DISCARD_MSG est spécifiée, le message n'est pas distribué à l'abonné.
  • Si l'option MQRO_DISCARD_MSG n'est pas spécifiée, le message est placé dans la file d'attente de rebut. S'il n'existe pas de file d'attente de rebut ou que le message ne peut pas être placé dans la file d'attente de rebut, la publication n'est pas distribuée à l'abonné. La distribution de la publication aux autres abonnés dépend des valeurs des attributs d'objet de rubrique PMSGDLV et NPMSGDLV . Pour une explication de ces attributs, voir les descriptions des paramètres de la commande DEFINE TOPIC .

ExitResponse est une zone de sortie de l'exit.

ExitResponse2 (MQLONG)
ExitResponse2 est réservé pour une utilisation ultérieure.
Feedback (MQLONG)
Feedback est le code retour à utiliser si l'exit renvoie MQXCC_SUPPRESS_FUNCTION dans ExitResponse.

En entrée de l'exit, Feedback a toujours la valeur MQFB_NONE. Si l'exit renvoie MQXCC_SUPPRESS_FUNCTION, définissez Feedback sur la valeur à utiliser pour le message lorsque le gestionnaire de files d'attente le place dans la file d'attente de rebut. En retour de l'exit, si Feedback a la valeur d'origine MQFB_NONE, le gestionnaire de files d'attente définit Feedback sur MQFB_STOPPED_BY_PUBSUB_EXIT.

Feedback est une zone d'entrée-sortie de l'exit.

ExitUserArea (MQBYTE16)
ExitUserArea est une zone disponible que l'exit peut utiliser. Chaque connexion possède un ExitUserAreadistinct. La longueur de ExitUserArea est donnée par MQ_EXIT_USER_AREA_LENGTH.
La zone ExitReason a la valeur MQXR_INIT lors du premier appel de l'exit. ExitUserArea est initialisé sur MQXUA_NONE lors du premier appel de l'exit pour une connexion. Les modifications ultérieures apportées à ExitUserArea sont conservées entre les appels de l'exit.

ExitUserArea est une zone d'entrée-sortie de l'exit.

ExitData (MQCHAR32)
ExitData est une donnée d'exit fixe définie par le paramètre PublishExitData de la strophe dans le fichier d'initialisation du gestionnaire de files d'attente. Les données sont remplies avec des blancs sur toute la longueur de la zone. Si aucune donnée d'exit fixe n'est définie dans le fichier d'initialisation, ExitData est vide. La longueur de ExitData est donnée par MQ_EXIT_DATA_LENGTH.

ExitData est une zone d'entrée de l'exit.

QMgrName (MQCHAR48)
QMgrName est le nom du gestionnaire de files d'attente local. Le nom est rempli avec des blancs sur toute la longueur de la zone. La longueur de cette zone est indiquée par MQ_Q_MGR_NAME_LENGTH.

QMgrName est une zone d'entrée de l'exit.

Hconn (MQHCONN)
Hconn est le descripteur représentant une connexion au gestionnaire de files d'attente. Utilisez uniquement Hconn comme paramètre pour les appels de fonction de propriété de message MQSETMP, MQINQMMPou MQDLTMP pour utiliser les propriétés de message.

Hconn est une zone d'entrée de l'exit.

MsgDescPtr (PMQMD)
MsgDescPtr est l'adresse du descripteur de message ( MQMD) du message en cours de traitement et est une copie du MQMD renvoyé par l'appel MQPUT. L'exit peut modifier le contenu du descripteur de message. Toute modification du contenu du descripteur de message doit être effectuée avec précaution. En particulier, dans le cas où la zone SubType de la structure MQSBC est de valeur MQSUBTYPE_PROXY, la zone CorrelId du descripteur de message ne doit pas être modifiée.

Aucun descripteur de message n'est transmis à l'exit si ExitReason est MQXR_INIT ou MQXR_TERM ; dans ces cas, MsgDescPtr est le pointeur null.

MsgDescPtr est une zone d'entrée de l'exit.

MsgHandle (MQHMSG)
MsgHandle est le descripteur des propriétés de message. Utilisez uniquement MsgHandle avec les appels de fonction de propriété de message MQSETMP, MQINQMMPou MQDLTMP pour utiliser les propriétés de message.

MsgHandle est une zone d'entrée de l'exit.

MsgInPtr (PMQVOID)
MsgInPtr est l'adresse des données de message d'entrée. Le contenu de la mémoire tampon adressée par MsgInPtr peut être modifié par l'exit ; voir MsgOutPtr .

MsgInPtr est une zone d'entrée de l'exit.

MsgInLength (MQLONG)
MsgInLength est la longueur en octets des données de message transmises à l'exit. L'adresse des données est indiquée par MsgInPtr.

MsgInLength est une zone d'entrée de l'exit.

MsgOutPtr (PMQVOID)
MsgOutPtr est l'adresse d'une mémoire tampon contenant les données de message renvoyées par l'exit. A l'entrée de l'exit, MsgOutPtr est null. En retour de l'exit, si la valeur est toujours null, le gestionnaire de files d'attente envoie le message spécifié par MsgInPtr, avec la longueur indiquée par MsgInLength.
Si l'exit modifie les données de message, utilisez l'une des procédures suivantes:
  • Si la longueur des données ne change pas, les données peuvent être modifiées dans la mémoire tampon adressée par MsgInPtr. Dans ce cas, ne modifiez pas MsgOutPtr et MsgOutLength.
  • Si les données modifiées sont plus courtes que les données d'origine, les données peuvent être modifiées dans la mémoire tampon adressée par MsgInPtr. Dans ce cas, MsgOutPtr doit être défini sur l'adresse de la mémoire tampon du message d'entrée et MsgOutLength sur la nouvelle longueur des données du message.
  • Si les données modifiées sont ou peuvent être plus longues que les données d'origine, l'exit doit obtenir une nouvelle mémoire tampon de messages. Copiez les données modifiées dans le fichier. Définissez MsgOutPtr sur l'adresse de la nouvelle mémoire tampon et définissez MsgOutLength sur la longueur des nouvelles données de message. L'exit est responsable de la libération de la mémoire tampon adressée par MsgOutPtr lors de l'appel suivant de l'exit.
Remarque: MsgOutPtr est toujours le pointeur null en entrée de l'exit, et non l'adresse d'une mémoire tampon de messages précédemment obtenue. Pour libérer la mémoire tampon précédemment obtenue, l'exit doit sauvegarder son adresse et sa longueur. Sauvegardez les informations dans ExitUserAreaou dans un bloc de contrôle dont l'adresse est enregistrée dans ExitUserArea.

MsgOutPtr est une zone d'entrée-sortie de l'exit.

MsgOutLength (MQLONG)
MsgOutLength est la longueur en octets des données de message renvoyées par l'exit. En entrée de l'exit, cette zone est toujours à zéro. Lors du retour de l'exit, cette zone est ignorée si MsgOutPtr est null. Pour plus d'informations sur la modification des données de message, voir MsgOutPtr .

MsgOutLength est une zone d'entrée-sortie de l'exit.

pEntryPoints (PMQIEP)
pEntryPoints est l'adresse d'une structure MQIEP via laquelle les appels MQI et DCI peuvent être effectués.

Déclaration de langage C-MQPSXP

typedef struct tagMQPSXP {
	MQCHAR4    StrucId;             /* Structure identifier */
	MQLONG     Version;             /* Structure version number */
	MQLONG     ExitId;              /* Type of exit */
	MQLONG     ExitReason;          /* Reason for invoking exit */
	MQLONG     ExitResponse;        /* Response from exit */
	MQLONG     ExitResponse2;       /* Reserved */
	MQLONG     Feedback;            /* Feedback code */
	MQBYTE16   ExitUserArea;        /* Exit user area */
	MQCHAR32   ExitData;            /* Exit data */
	MQCHAR48   QMgrName;            /* Name of local queue manager */
	MQHCONN    Hconn;               /* Connection handle */
	MQHMSG     MsgHandle;           /* Handle to message properties */
	PMQMD      MsgDescPtr;          /* Address of message descriptor */
	PMQVOID    MsgInPtr;            /* Address of input message data */
	MQLONG     MsgInLength;         /* Length of input message data */
	PMQVOID    MsgOutPtr;           /* Address of output message data */
	MQLONG     MsgOutLength;        /* Length of output message data */
	/* Ver:1 */
	PMQIEP     pEntryPoints;        /* Address of the MQIEP structure */
	/* Ver:2 */
}	MQPSXP;