Exity

21 stycznia 2011, godz 13:24

Exity są to specjalne aplikacje powiązane z kanałami MQ uruchamiane przez proces MCA. W zależności od tego jakiego typu są to exity i z jakim typem kanału są one związane, mogą mieć różne zastosowanie. Pozwalają one np. na weryfikacje strony klienckiej przy próbie połączenie i pozwolić lub nie na nawiązanie połączenia. Mogą służyć do manipulacji komunikatami zanim zostaną one odczytane przez aplikacje.

Typy exitów

Poniżej znajduje się lista możliwych typów exitów:

Message exit

Ten typ exita jest wywoływany przy każdej obsłudze komunikatu. Tego typu exit jest wywoływany zaraz po wywołaniu metody MQGET przez proces MCA po stronie wysyłającej, przed wywołaniem metody MQPUT przez proces MCA po stronie odbierającej, oraz przy inicjacji i kończeniu pracy procesu MCA. Możemy np. za pomocą tego exita przed wysłaniem go po sieci treść komunikatu zakodować po stronie sender, a następnie odkodować po stronie reciever. Możemy tu również zmieniać dowolne pola nagłówka MQMD.

Message-retry exit

Tego typu exit jest wywoływany, kiedy nie udało się otworzyć docelową kolejkę. Możemy tu np. ustawiać jak często i z jaką częstotliwością ponawiać próbę umieszczenia komunikatu w kolejce.

Receive exit

Tego typu exit jest wywoływany zaraz po pojawieniu się transmisji po sieci oraz przy inicjacji i kończeniu pracy procesu MCA.

Security exit

Jest to chyba najczęściej spotykany typ exita. Tego typu exit jest wywoływany zaraz po zakończeniu procesu negocjacji przy starcie kanału po obu stronach oraz przy inicjacji i kończeniu pracy procesu MCA. Pozwala on na autentykację drugiej strony komunikacji. Za pomocą tego exita możemy po stronie odbierającej kanału oczekiwać na wysłanie przez drugą stronę hasła pozwalającego na komunikację. W takim przypadku po drugiej stronie kanału potrzebne jest zastosowanie innego security exita, który wysłałby takie hasło.

Send exit

Tego typu exit jest wywoływany przed transmisją po sieci oraz przy inicjacji i kończeniu pracy procesu MCA.

Auto-definition exit

Tego typu exit jest wywoływany, kiedy staramy się wystartować konał typu auto-definition. Możemy tu np. zmieniać definicję tworzonego kanału.

Tryby wywołań exita

Rozróżniamy następujące tryby wywołań exita:

MQXR_INIT

Ten tryb oznacza, że exit jest wywoływany po raz pierwszy. W tym miejscu możemy zainicjować zewnętrzne zasoby, oraz ogólnie zainicjować jego pracę.

MQXR_TERM

Ten tryb jest przeciwieństwem poprzedniego. Oznacza on, że exit jest w ostatniej fazie procesowania i to jest najlepsze miejsce do zwolnienia wszystkich zainicjowanych zasobów wcześniej podczas trybu MQXR_INIT .

MQXR_MSG

Ten tryb oznacza, że exit jest w trakcie procesowanie komunikatu. Tryb ten jest związany tylko i wyłącznie z exitami typu message.

MQXR_XMIT

Ten tryb oznacza, że exit jest w trakcie transmisji danych. Tryb ten jest związany tylko i wyłącznie z exitami typu send i receive.

MQXR_SEC_MSG

Ten tryb oznacza, że exit jest w trakcie procesowania danych security. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXR_INIT_SEC

Ten tryb występuje zaraz po pojawieniu się trybu MQXR_INIT w przypadku security exita po stronie reciever. Jeśli teraz zostanie zwrócona odpowiedź MQXCC_OK , to po stronie security exita typu sender zostanie wygenerowany tryb MQXR_INIT_SEC . Jeśli teraz zostanie zwrócona odpowiedź MQXCC_SEND_SEC_MSG lub MQXCC_SEND_AND_REQUEST_SEC_MSG , to po stronie security exita typu sender nie zostanie wygenerowany nigdy tryb MQXR_INIT_SEC tylko MQXR_SEC_MSG . Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXR_RETRY

Ten tryb jest wywoływany w przypadku ponownej próby umieszczenia komunikatu w kolejce po pojawieniu się błędu. Tryb ten jest związany tylko i wyłącznie z exitami typu message-retry.

MQXR_AUTO_CLUSSDR

Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu cluster-sender. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_RECEIVER

Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu receiver. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_SVRCONN

Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu server-connection. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_AUTO_CLUSRCVR

Ten tryb jest wywoływany w przypadku automatycznego utworzenia kanału typu cluster-receiver. Tryb ten jest związany tylko i wyłącznie z exitami typu auto-definition.

MQXR_SEC_PARMS

Ten tryb jest wywoływany w celu poinformowania iż struktura MQCSP została przesłana do exita.

Typy odpowiedzi exita

Rozróżniamy następujące typy odpowiedzi exita:

MQXCC_OK

Ten typ oznacza, że procesowanie w exicie zakończyło się sukcesem.

MQXCC_SUPPRESS_FUNCTION

Ten typ oznacza, że kanał powinien zostać przerwany.

MQXCC_SEND_SEC_MSG

Ten typ oznacza, że exit drugiej stronie przekazuje dane. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXCC_SEND_AND_REQUEST_SEC_MSG

Ten typ oznacza, że exit drugiej stronie przekazuje dane oraz dodatkowa, że oczekuje na odpowiedź. Tryb ten jest związany tylko i wyłącznie z exitami typu security.

MQXCC_SUPPRESS_EXIT

MQXCC_CLOSE_CHANNEL

Ten typ oznacza, że MCA powinien zamknąć kanał. Tryb ten jest związany ze wszystkimi typami exitów za wyjątkiem exitów typu auto-definition.

Poniższa tabelka ukazuje możliwe exity i rodzaje kanałów do których mogą być one podpięte.

ExitMożliwe kanały
Message exitSender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel
Message - retry exitReceiver channel, Requester channel, Cluster- receiver channel
Receive exitSender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Security exitSender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Send exitSender channel, Server channel, Cluster- sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Client- connection channel, Server- connection
Auto - definition exitCluster - sender channel, Receiver channel, Requester channel, Cluster- receiver channel, Server - connection

Wywoływana funkcja i struktury exita

Wywoływana funkcja

void MQENTRY Exit( PMQCXP pChannelExitParms,


PMQCD pChannelDefinition,


PMQLONG pDataLength,


PMQLONG pAgentBufferLength,


PMQCHAR pAgentBuffer,


PMQLONG pExitBufferLength,


PMQCHAR *pExitBufferAddr)


Struktura MQCXP

struct tagMQCXP {


MQCHAR4StrucId;/* Structure identifier */


MQLONGVersion;/* Structure version number */


MQLONGExitId; /* Type of exit */


MQLONGExitReason; /* Reason for invoking exit */


MQLONGExitResponse;/* Response from exit */


MQLONGExitResponse2;/* Secondary response from exit */


MQLONGFeedback;/* Feedback code */


MQLONGMaxSegmentLength;/* Maximum segment length */


MQBYTE16ExitUserArea;/* Exit user area */


MQCHAR32ExitData;/* Exit data */


MQLONGMsgRetryCount;/* Number of times the message has


been retried */


MQLONGMsgRetryInterval;/* Minimum interval in milliseconds


after which the put operation


should be retried */


MQLONGMsgRetryReason; /* Reason code from previous attempt


to put the message */


MQLONGHeaderLength;/* Length of header information */


MQCHAR48PartnerName;/* Partner Name */


MQLONGFAPLevel;/* Negotiated Formats and Protocols


level */


MQLONGCapabilityFlags;/* Capability flags */


MQLONGExitNumber; /* Exit number */


/* Ver:3 */


/* Ver:4 */


MQLONGExitSpace;/* Number of bytes in transmission


buffer reserved for exit to use */


/* Ver:5 */


MQCHAR12SSLCertUserid;/* User identifier associated


with remote SSL certificate */


MQLONGSSLRemCertIssNameLength;/* Length of distinguished


name of issuer of remote


SSL certificate */


MQPTR SSLRemCertIssNamePtr;/* Address of distinguished


name of issuer of remote


SSL certificate */


PMQCSPSecurityParms;/* Address of security parameters */


MQLONGCurHdrCompression;/* Header data compression


used for current message */


MQLONGCurMsgCompression;/* Message data compression


used for current message */


/* Ver:6 */


};



Struktura MQCD


struct tagMQCD {


MQCHARChannelName[20];/* Channel definition name */


MQLONGVersion;/* Structure version number */


MQLONGChannelType;/* Channel type */


MQLONGTransportType; /* Transport type */


MQCHARDesc[64];/* Channel description */


MQCHARQMgrName[48];/* Queue-manager name */


MQCHARXmitQName[48]; /* Transmission queue name */


MQCHARShortConnectionName[20];/* First 20 bytes of connection


name */


MQCHARMCAName[20];/* Reserved */


MQCHARModeName[8];/* LU 6.2 Mode name */


MQCHARTpName[64];/* LU 6.2 transaction program


name */


MQLONGBatchSize; /* Batch size */


MQLONGDiscInterval;/* Disconnect interval */


MQLONGShortRetryCount;/* Short retry count */


MQLONGShortRetryInterval;/* Short retry wait interval */


MQLONGLongRetryCount;/* Long retry count */


MQLONGLongRetryInterval; /* Long retry wait interval */


MQCHARSecurityExit[128]; /* Channel security exit name*/


MQCHARMsgExit[128];/* Channel message exit name */


MQCHARSendExit[128]; /* Channel send exit name */


MQCHARReceiveExit[128];/* Channel receive exit name */


MQLONGSeqNumberWrap; /* Highest allowable message


sequence number */


MQLONGMaxMsgLength;/* Maximum message length */


MQLONGPutAuthority;/* Put authority */


MQLONGDataConversion;/* Data conversion */


MQCHARSecurityUserData[32];/* Channel security exit user


data */


MQCHARMsgUserData[32];/* Channel message exit user


data */


MQCHARSendUserData[32];/* Channel send exit user


data */


MQCHARReceiveUserData[32];/* Channel receive exit user


data */


/* Ver:1 */


MQCHARUserIdentifier[12];/* User identifier */


MQCHARPassword[12];/* Password */


MQCHARMCAUserIdentifier[12]; /* First 12 bytes of MCA user


identifier */


MQLONGMCAType;/* Message channel agent type*/


MQCHARConnectionName[264];/* Connection name */


MQCHARRemoteUserIdentifier[12];/* First 12 bytes of user


identifier from partner */


MQCHARRemotePassword[12];/* Password from partner */


/* Ver:2 */


MQCHARMsgRetryExit[128]; /* Channel message retry exit


name */


MQCHARMsgRetryUserData[32];/* Channel message retry exit


user data */


MQLONGMsgRetryCount; /* Number of times MCA will try


to put the message, after


first attempt has failed */


MQLONGMsgRetryInterval;/* Minimum interval in


milliseconds after which the


open or put operation will


be retried */


/* Ver:3 */


MQLONGHeartbeatInterval; /* Time in seconds between


heartbeat flows */


MQLONGBatchInterval; /* Batch duration */


MQLONGNonPersistentMsgSpeed; /* Speed at which nonpersistent


messages are sent */


MQLONGStrucLength;/* Length of MQCD structure */


MQLONGExitNameLength;/* Length of exit name */


MQLONGExitDataLength;/* Length of exit user data */


MQLONGMsgExitsDefined;/* Number of message exits


defined */


MQLONGSendExitsDefined;/* Number of send exits


defined */


MQLONGReceiveExitsDefined;/* Number of receive exits


defined */


MQPTR MsgExitPtr;/* Address of first MsgExit


field */


MQPTR MsgUserDataPtr;/* Address of first MsgUserData


field */


MQPTR SendExitPtr;/* Address of first SendExit


field */


MQPTR SendUserDataPtr;/* Address of first


SendUserData field */


MQPTR ReceiveExitPtr;/* Address of first ReceiveExit


field */


MQPTR ReceiveUserDataPtr;/* Address of first


ReceiveUserData field */


/* Ver:4 */


MQPTR ClusterPtr;/* Address of a list of cluster


names */


MQLONGClustersDefined;/* Number of clusters to which


the channel belongs */


MQLONGNetworkPriority;/* Network priority */


/* Ver:5 */


MQLONGLongMCAUserIdLength;/* Length of long MCA user


identifier */


MQLONGLongRemoteUserIdLength;/* Length of long remote user


identifier */


MQPTR LongMCAUserIdPtr;/* Address of long MCA user


identifier */


MQPTR LongRemoteUserIdPtr;/* Address of long remote user


identifier */


MQBYTE40MCASecurityId; /* MCA security identifier */


MQBYTE40RemoteSecurityId;/* Remote security identifier*/


/* Ver:6 */


MQCHARSSLCipherSpec[32]; /* SSL CipherSpec */


MQPTR SSLPeerNamePtr;/* Address of SSL peer name */


MQLONGSSLPeerNameLength; /* Length of SSL peer name */


MQLONGSSLClientAuth; /* Whether SSL client


authentication is required */


MQLONGKeepAliveInterval; /* Keepalive interval */


MQCHARLocalAddress[48];/* Local communications


address */


MQLONGBatchHeartbeat;/* Batch heartbeat interval */


/* Ver:7 */


MQLONGHdrCompList[2];/* Header data


compression list */


MQLONGMsgCompList[16];/* Message data


compression list */


MQLONGCLWLChannelRank;/* Channel rank */


MQLONGCLWLChannelPriority;/* Channel priority */


MQLONGCLWLChannelWeight; /* Channel weight */


MQLONGChannelMonitoring; /* Channel monitoring */


MQLONGChannelStatistics; /* Channel statistics */


/* Ver:8 */


};



powrót

Komentarze

Dodaj Komentarz