一、MQI的基本数据类型

数据类型
说明
MQBYTE
单字节数据
MQBYTEn

16243264字节的字符串

MQCHAR
单字节字符
MQCHARn

包含4812162028324864128256个单字节字符的字符串

MQHCONN
连接句柄,32
MQHOBJ
对象句柄,32
MQLONG
32 位带符号二进制整数
PMQLONG
指向MQLONG 类型数据的执政
 

二、MQI API

1、  连接到队列管理器

MQCONN(&QMgrName , &Hconn , &CompCode , &Reason)

MQCONNX(&QMgrName , ConnectOpts , &Hconn , &CompCode , &Reason)

入口参数:
Char[]    QMgrName :队列管理器名,如果为空串,则表示连接到默认队列管理器
ConnectOpts :控制MQCONNX 行为的选项
出口参数
MQLONG     ComCode :完成码
MQLONG     Reason :原因码
MQHCONN  Hconn :队列管理器的连接句柄
ConnectOpts
2、  打开WebSphere MQ 对象

可以打开的三种WebSphere MQ对象类型有:队列,过程定义,队列管理器

MQOPEN(Hconn,&ObjDesc,Options,&Hobj,&ComCode,&Reason)
入口参数:
MQCONN     Hconn MQCONN 调用返回的连接句柄
MQOD ObjDesc :打开对象的描述,它以对象描述结构的形式出现
MQLONG       Options :控制调用行为的一个或多个选项
出口参数:
MQLONG     ComCode :完成码
MQLONG       Reason :原因码
MQHOBJ        Hobj :访问对象的对象句柄
MQOD     ObjDesc :调用后返回的对象描述结构
3、  关闭WebSphere MQ 对象

MQQCLOSEHconn&HobjOptions&comCode&reason

入口参数:
MQHCONN    Hconn :连接句柄
MQHOBJ        Hobj :被关闭对象地句柄

MQLONG      Options:关闭选项(如果关闭的不是永久动态队列的话,为MQCO_NONE)

MQLONG      结果代码:(完成代码CompCode和原因代码reason

MQHOBJ        Hobj (对象句柄,重置为MQHO_UNUSABLE_HOBJ
4、  断开与队列管理器的连接
MQDISC(&Hconn,&CompCode,&Reason)
入口参数:
MQHCONN    Hconn: 提供到队列管理器的连接句柄
出口参数:

MQLONG      结果代码:(完成代码CompCode和原因代码reason

MQHCONN    Hconn( 连接句柄设置为MQHC_UNUSABLE_HCONN)
5、  将消息放入队列
1 )、将多个消息放入一个已经打开的队列
MQPUT Hconn ,Hobj &MsgDesc PutMsgOpts BufferLength Buffer &CompCode &Reason
该函数调用前,队列必须先试用MQOO_OUTPUT 选项打开
入口参数:
MQHCONN    Hconn :连接句柄,由MQCONN 调用返回
MQHOBJ        Hobj :队列句柄,由MQOPEN 返回
MQMD           MsgDesc :消息的描述
MQPMO         PutMsgOpts :控制信息,其形式为一个放置消息选项结构
MQLONG       BufferLength :消息所包含数据的长度
char[]              Buffer :消息本身
出口参数:
结果代码:CompCode (完成代码)Reason (原因代码)

MsgDesc:已经根系的消息描述起河选项

2 )、将单一消息放入一个队列,而不显式打开队列
如果仅将单一消息PUT 到队列中,我们可以调用MQPUT1 ,不需要MQOPEN 打开队列即可将单个信息放入队列
MQPUT1(Hconn ,&ObjDesc,&MsgDesc,&PutMsgOpts,BufferLength,Buffer,&CompCode,&Reason)
6、  从队列获取消息
MQGET(Hconn,Hobj,&MsgDesc,&GetMsgOpts,BufferLength,Buffer,&DataLength,&CompCode,&Reason)
为了执行MQGET 调用,必须用MQOO_Input_shared MQOO_Input_Exclusive 选项打开队列,才可能使用这个调用。从队列获得消息是物理顺序还是逻辑顺序,取决于MQOPEN 调用和MQGET 调用所采用的选项
此调用的入口参数如下:
MQHCONN    Hconn :连接句柄,由MQCONN 调用返回
MQHOBJ        Hobj :队列句柄,由MQOPEN 调用返回
MQMD           MsgDesc :消息的描述
MQGMO         GetMsgOpts :控制信息,以获取消息选项(MQGMO )结构的形式
MQLONG       BufferLength :消息所包含数据的长度
Char[]             Buffer :消息本身
出口参数:
结果代码:CompCode :完成代码。Reason :原因代码
char[]              Buffer :消息本身
MQMD           MsgDesc :已经更新的消息描述器和选项
MQLONG       DataLength :消息的实际长度
7、  从队列浏览消息
1 )、调用MQOPEN 来打开要浏览的队列,选中MQOO_BROWSE(O_options) 选项
2 )、调用MQGET ,并选中MQGMO_BROWSE_NEXT gmp.Options )选项,以便逐步浏览随后的许多消息,在任何新的MQGET 调用之前将MsgId CorrelId 设为空
3 )、调用MQCLOSE 关闭队列
8、  查询对象属性
MQINQ(Hconn,Hobj,SelectorCount,Selectors,IntAttrCount,&IntAttrs,CharAttrLength,&CharAttrs,&CompCode,&Reason)
入口参数如下:
MQHCONN    Hconn :连接句柄,由MQCONN 调用返回
MQHOBJ        Hobj :队列句柄,由MQOPEN 调用返回
MQLONG       SelectorCount :选择器数量
MQLONG[]     Selectors :属性选择器数组
MQLONG       IntAttrCount :被查询的整数数量
MQLONG[]     IntAttrs :整型变量数组,调用向其返回指定的整型
MQLONG       CharAttrLength :字符属性缓存区的长度
Char[]             CharAttrs :字符缓存区,调用把被调查字符属性的值放入其中
出口参数如下:
MQLONG[]     IntAttrs :一系列拷贝到数组中的整型值
CHAR[]          CharAttrs :字符属性返回其中的缓存区
结果代码(CompCode :完成代码,Reason :原因代码)
就字符属性而言,所得的缓存区由长度固定的属性值一个接一个地填充。如果这些属性中的任何一个实际值小于属性的固定长度,那么其余的空间由空白区填充。如果任何对象(在这种情况下,对象就是队列)请求的属性不适合于该类型的队列,那么空间由星号(* )填充
9、  设置对象属性
MQSET(Hconn,Hobj,SelectorCount,Selectors,IntAttrCount,IntAttrs,CharAttrLength,CharAttrs,CompCode,Reason)
入口参数如下:
MQHCONN    Hconn :连接句柄,由MQCONN 调用返回
MQHOBJ        Hobj :队列句柄,由MQOPEN 调用返回
MQLONG       SelectorCount :选择器数量
MQLONG[]     Selectors :属性选择器数组
MQLONG       IntAttrCount :被查询的整数数量
MQLONG[]     IntAttrs :整型变量数组,调用向其返回指定的整型
MQLONG       CharAttrLength :字符属性缓存区的长度
Char[]             CharAttrs :字符缓存区,调用把被调查字符属性的值放入其中
出口参数如下:
结果代码(CompCode :完成代码,Reason :原因代码)
MQSET selectors )可以设定的属性:

InhibitGet(远程队列不适合)

DistList
InhibitPUT
TriggerControl
TriggerType

TriggerDepth

TriggerMsgPriority
TriggerData

10、              MQI中的事物处理

MQCMIT(Hconn&CompCode&Reason)

MQBACK(Hconn,&CompCode,&Reason)

(1)    局部工作单元

MQPUTMQGET调用中的PutMessageOpt(PMO)设为Mqpmo_SyncpointGetMessageOpt(GMO)设为Mqgmo_SyncPoint代码

不调用MQBEGIN
工作单元中的每个操作都必须设定MQPMO(PutMessageOpt) MQGMO(Mqpmo_Syncpoint) 选项

(2)    全局工作单元

调用MQBEGIN(Hconn,BeginOptions,CompCode,Reason) 来启动全局单元
如果局部工作单元已经启动,那么MQBEGIN 调用会失败,返回MQRC_UOW_IN_PROGRESS 原因。

11、              MQI中的消息分组

组中的每个消息都必须有MQMF_MSG_IN_GROUP 标志,但是最后一条消息则应具有MQMF_LAST_MSG_IN_GROUP 标志。组中消息的顺序存储在MQMD 结构的MsgSeqNumber 字段中,它由队列管理器自动生成
md.Version=MQMD_VERSION_2;
md.MsgFlags=MQMF_MSG_IN_GROUP
md.GroupId=MY_GROUP_ID;
md.Encoding=MQENC_NATIVE:
md.CodedCharSetId=MQCCSI_Q_MGR