《mq_appdevl》由会员分享,可在线阅读,更多相关《mq_appdevl(49页珍藏版)》请在金锄头文库上搜索。
1、应用程序设计Zhang Li Ping 议程. 程序流程. DEMO应用程序框架(程序). 触发程序. 触发监控程序. 出口程序. 事务支持. 死信队列的处理符号表示MQPUT1 (Hconn, ObjDesc, MsgDesc, PutMsgOpts, BufferLength, Buffer, CompCode, Reason)MQSeries 应用程序设计指南CALL “MQPUT1“ USING HCONN, OBJDESC, MSGDESC, PUTMSGOPTS, BUFFERLENGTH, BUFFER, COMPCODE, REASON.Equivalent in COBOLM
2、QPUT1 (Hconn, Equivalent in C1议程. 程序流程. DEMO应用程序框架(程序). 触发程序. 触发监控程序. 出口程序. 事务支持. 死信队列的处理应用程序设计接口Application ProgramMQIQueue ManagerMQCONNMQDISCMQOPENMQCLOSEMQPUTMQSETMQINQMQPUT1MQGETMQCMITMQBACKProcess Definition ObjectQueue Manager ObjectQueue Object程序流程MQCONNMQCLOSEMQOPENMQPUTMQGETMQINQMQSETMQPUT
3、1MQDISCMQCONN : Connect to Queue Manager MQDISC : Disconnect to Queue Manager MQOPEN : Open Queue Object MQPUT : Put message to Queue MQGET : Get message from Queue MQCLOSE : Close Queue Object MQPUT1 : Put one message to Queue(OPEN/PUT/CLOSE) MQINQ : Inquiry Object attribute MQSET : Set Object attr
4、ibute MQCMITMQBACKMQBEGIN. 程序流程. 应用程序框架. 触发程序. 触发监控程序. 出口程序. 事务支持. 死信队列的处理2议程应用程序框架1. 包含头文件:#include 2. 说明变量:MQOD od = MQOD_DEFAULT; /* Object Descriptor */MQMD md = MQMD_DEFAULT; /* Message Descriptor */MQGMO gmo = MQGMO_DEFAULT; /* get message options */MQHCONN Hcon; /* connection handle */MQHOBJ
5、Hobj; /* object handle */MQLONG O_options; /* MQOPEN options */MQLONG C_options; /* MQCLOSE options */MQLONG CompCode; /* completion code */MQLONG OpenCode; /* MQOPEN completion code */MQLONG Reason; /* reason code */MQLONG CReason; /* reason code for MQCONN */MQBYTE buffer101; /* message buffer */M
6、QLONG buflen; /* buffer length */MQLONG messlen; /* message length received */char QMName50; /* queue manager name */3. 连接队列管理器:MQCONN(QMName, 应用程序框架(续)4. 打开队列: (1). Options设置打开队列的: O_options = MQOO_INPUT_AS_Q_DEF + MQOO_FAIL_IF_QUIESCING (2). 打开队列: MQOPEN(Hcon, 5. 取出消息: (1). Option设置取出消息的: gmo.Matc
7、hOptions = MQMO_NONE; /* ID and Correlation ID after every MQGET*/ gmo.Options = MQGMO_WAIT /* wait for new messages */+ MQGMO_CONVERT; /* convert if necessary */ gmo.WaitInterval = 15000; /* 15 second limit for waiting */(2). 设置消息描述: md.Encoding = MQENC_NATIVE; md.CodedCharSetId = MQCCSI_Q_MGR;(3).
8、 取出消息: MQGET (Hcon, Hobj, &md, &gmo, buflen, buffer, &messlen, &CompCode, &Reason)6. 关闭队列: MQCLOSE(Hcon,&Hobj, C_Options, &CompCode, &Reason)7. 断开连接: MQDISC(&Hcon, &CompCode, &Reason)DEMO应用程序MQ Toolscsamples 位于安装目录下中请参阅程序中的注释语句MQ header file - - cmqc.hcl amqsput0.c /link mqm.lib编译:Amqsput0.c - - - -
9、 放置消息 Amqsget0.c - - - - 取出消息Object descriptor - - - - MQODObjectTypeMQOT_Q - queueMQOT_PROCESS - processMQOT_Q_MGR - queue managerObjectName如果ObjectType 的值为MQOT_Q_MGR 此项必须为空同一个队列管理器下定义的不同类型的对象都应该有唯一的名字ObjectQMgrName此值为空表示本地的队列管理器DynamicQName此值给出即将被创建的动态队列的名字AlternateUserId打开对象时用另外的用户标识来作权限检查Message
10、 Descriptor - - - - MQMDReport (要求实时的系统应注意使用此选项)MQRO_EXECPTION - 意外事件报告,且报告消息中不含原始应用数据MQRO_EXPIRATION - 消息过期报告,且报告消息中不含原始应用数据MQRO_EXPIRATION_WITH_DATA - 100包含字节的原始应用数据MQRO_EXPIRATION_WITH_FULL_DATA - 包含全部原始应用数据MQRO_COA - 消息已到达目的队列中的报告MQRO_COA_WITH_DATAMQRO_COD - 消息已被应用程序取走的报告MQRO_COD_WITH_DATAMQRO_N
11、ONE - (default)不产生报告消息Message Descriptor(Contd)MsgTypeMQMT_DATAGRAM - 不要求接收端应用程序产生应答消息MQMT_REQUEST - 要求接收端应用程序产生应答消息MQMT_REPLY - 对前一条请求消息的应答MQMT_REPORT - 报告一些预料到的或意外的事件Persistence MQPUTMQPUT1(对于和)MQPER_PERSISTENTMQPER_NOT_PERSISTENTMQPER_PERSISTENCE_AS_Q_DEF:应用程序可以根据以下方式检索消息MsgIdCorrelIdMsgId&Correl
12、IdNoneMessage and correlation identifiersMessage descriptor: 中的两个域MsgId CorrelId和MsgId, message identifier(消息标识符)MQPUTMQMI_NONE如果应用程序在发送调用给定,队列管理器会产生唯一 的消息标识符CorrelId, correlation identifier (相关标识符), MsgId在应答或报告消息中 通常拷贝原始消息中的这两个域均被队列管理器视为二进制位串因此无须进行数据转换Retrieving messages需要有选择的检索时:MQGET 在调用之前设置MsgId
13、 / 和 或CorrelId MQGMO 将中的MatchOptions 的值确保设置为 MQMO_MATCH_MSG_ID + MQMO_MATCH_CORREL_ID (5仅有版本 以上支持)不需要有选择的检索时:将MsgId 和CorrelId MQMI_NONE相应的值设置为 and MQCI_NONE( MQGET 在每次)调用之前或, MQGMO 将中的MatchOptions 的值设置为MQMO_NONE(5)仅有版本 以上支持MQGET在一个调用的返回时,设置MsgId和CorrelId的值用来检 索消息Common parametersHconn, connection ha
14、ndle(连接句柄)MQCONN MQCONNX 由和调用返回MQI 其他调用将其作为输入参数CompCode, completion code(完成代码)MQCC_OKMQCC_WARNINGMQCC_FAILEDReason, reason code(原因代码)MQRC_. . .MQRC_NONEMQOPEN OptionsMQOPEN :至少要有以下选项之一 MQOO_BROWSE MQOO_INPUT_* ()这种同类型选项只能有一个 MQOO_INQUIRE MQOO_OUTPUT MQOO_SET 共享或互斥 MQOO_INPUT_AS_Q_DEF - 根据队列自身的定义来取值 由队列属性定义 DefInputOpenOption项来决定 MQOO_INPUT_SHARED MQOO_INPUT_EXCLUSIVE MQOO_BROWSE(浏览光标) MQGMO_BROWSE_FIRST MQGMO_BROWSE_NEXT MQGMO_BROWSE_MSG_UNDER_CURSORPut