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.
| 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)StrucIDest l'identificateur de structure. La valeur est la suivante:MQPSXP_STRUCIDMQPSXP_STRUCIDest l'identificateur de la structure des paramètres d'exit de publication. Pour le langage de programmation C, la constanteMQPSXP_STRUC_ID_ARRAYest également définie ; elle a la même valeur queMQPSXP_STRUC_ID, mais il s'agit d'un tableau de caractères à la place d'une chaîne.
StrucIDest une zone d'entrée de l'exit.Version(MQLONG)Versionest le numéro de version de la structure. La valeur est la suivante:MQPSXP_VERSION_1MQPSXP_VERSION_1est la structure des paramètres d'exit de publication version 1. La constanteMQPSXP_CURRENT_VERSIONest également définie avec la même valeur.
Versionest une zone d'entrée de l'exit.ExitId(MQLONG)ExitIdest le type d'exit appelé. La valeur est la suivante:MQXT_PUBLISH_EXIT- Exit de publication.
ExitIdest une zone d'entrée de l'exit.ExitReason(MQLONG)ExitReasonest 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.
ExitReasonest une zone d'entrée de l'exit.ExitResponse(MQLONG)- Définissez
ExitResponsedans l'exit pour indiquer comment le traitement doit continuer.ExitResponseest l'une des valeurs suivantes:MQXCC_OK- Définissez
MQXCC_OKpour poursuivre le traitement normalement. DéfinissezMQXCC_OKen réponse à toute valeur deExitReason. MQXCC_FAILED- Définissez
MQXCC_FAILEDpour arrêter l'opération de publication. Le code achèvementMQCC_FAILEDet 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_FUNCTIONpour arrêter le traitement normal du message. DéfinissezMQXCC_SUPPRESS_FUNCTIONuniquement siExitReasona la valeurMQXR_PUBLICATION.
ExitResponseest une zone de sortie de l'exit. ExitResponse2(MQLONG)ExitResponse2est réservé pour une utilisation ultérieure.Feedback(MQLONG)Feedbackest le code retour à utiliser si l'exit renvoieMQXCC_SUPPRESS_FUNCTIONdansExitResponse.En entrée de l'exit,
Feedbacka toujours la valeurMQFB_NONE. Si l'exit renvoieMQXCC_SUPPRESS_FUNCTION, définissezFeedbacksur 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, siFeedbacka la valeur d'origineMQFB_NONE, le gestionnaire de files d'attente définitFeedbacksurMQFB_STOPPED_BY_PUBSUB_EXIT.Feedbackest une zone d'entrée-sortie de l'exit.ExitUserArea(MQBYTE16)ExitUserAreaest une zone disponible que l'exit peut utiliser. Chaque connexion possède unExitUserAreadistinct. La longueur deExitUserAreaest donnée parMQ_EXIT_USER_AREA_LENGTH.ExitData(MQCHAR32)ExitDataest 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,ExitDataest vide. La longueur deExitDataest donnée parMQ_EXIT_DATA_LENGTH.ExitDataest une zone d'entrée de l'exit.QMgrName(MQCHAR48)QMgrNameest 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 parMQ_Q_MGR_NAME_LENGTH.QMgrNameest une zone d'entrée de l'exit.Hconn(MQHCONN)Hconnest le descripteur représentant une connexion au gestionnaire de files d'attente. Utilisez uniquementHconncomme paramètre pour les appels de fonction de propriété de message MQSETMP, MQINQMMPou MQDLTMP pour utiliser les propriétés de message.Hconnest une zone d'entrée de l'exit.MsgDescPtr(PMQMD)MsgDescPtrest 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 zoneSubTypede la structureMQSBCest de valeurMQSUBTYPE_PROXY, la zoneCorrelIddu descripteur de message ne doit pas être modifiée.Aucun descripteur de message n'est transmis à l'exit si
ExitReasonestMQXR_INITouMQXR_TERM; dans ces cas,MsgDescPtrest le pointeur null.MsgDescPtrest une zone d'entrée de l'exit.MsgHandle(MQHMSG)MsgHandleest le descripteur des propriétés de message. Utilisez uniquementMsgHandleavec les appels de fonction de propriété de message MQSETMP, MQINQMMPou MQDLTMP pour utiliser les propriétés de message.MsgHandleest une zone d'entrée de l'exit.MsgInPtr(PMQVOID)MsgInPtrest l'adresse des données de message d'entrée. Le contenu de la mémoire tampon adressée parMsgInPtrpeut être modifié par l'exit ; voirMsgOutPtr.MsgInPtrest une zone d'entrée de l'exit.MsgInLength(MQLONG)MsgInLengthest la longueur en octets des données de message transmises à l'exit. L'adresse des données est indiquée parMsgInPtr.MsgInLengthest une zone d'entrée de l'exit.MsgOutPtr(PMQVOID)MsgOutPtrest 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,MsgOutPtrest null. En retour de l'exit, si la valeur est toujours null, le gestionnaire de files d'attente envoie le message spécifié parMsgInPtr, avec la longueur indiquée parMsgInLength.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 pasMsgOutPtretMsgOutLength. - 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,MsgOutPtrdoit être défini sur l'adresse de la mémoire tampon du message d'entrée etMsgOutLengthsur 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
MsgOutPtrsur l'adresse de la nouvelle mémoire tampon et définissezMsgOutLengthsur la longueur des nouvelles données de message. L'exit est responsable de la libération de la mémoire tampon adressée parMsgOutPtrlors de l'appel suivant de l'exit.
Remarque:MsgOutPtrest 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 dansExitUserAreaou dans un bloc de contrôle dont l'adresse est enregistrée dansExitUserArea.MsgOutPtrest une zone d'entrée-sortie de l'exit.- Si la longueur des données ne change pas, les données peuvent être modifiées dans la mémoire tampon adressée par
MsgOutLength(MQLONG)MsgOutLengthest 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 siMsgOutPtrest null. Pour plus d'informations sur la modification des données de message, voirMsgOutPtr.MsgOutLengthest une zone d'entrée-sortie de l'exit.pEntryPoints(PMQIEP)pEntryPointsest 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;