1、 MQ 编程概述
IBM Websphere MQ 编程主要有两部分:一是 MQ 系统管理编程;一是 MQ 应用开发编程。
MQ 系统管理编程:
所谓的 MQ 系统管理编程是指使用 MQ 提供的编程接口,编制特定的应用程序,来进行对 MQ 各种对象的监控和管理,如:查询通道的状态、队列的深度等运行时状态,查询队列管理器的属性,队列的属性或通道的属性等静态参数;以及对 MQ 进行各种操作,如:启动 / 停止通道,创建 / 删除各种对象,修改各种对象的属性等。
实际上, MQ 为我们提供了多种系统管理的手段,其中包括:
利用 MQ 的图形管理界面进行操作、监控和管理: MQ 资源管理器为用户提供了良好的管理界面,从而方便用户对中间件系统的配置和管理工作,通过 MQ 资源管理器,用户可以定义、修改、删除中间件的各种资源、对象,察看各种对象的属性,监控各种对象的运行状态;
利用 MQSC 命令,通过命令行的方式对 MQ 进行操作、监控和管理,尤其值得一提的是 MQSC 命令在各个平台上都是相同的,在一个有若干平台共存的系统中大大地方便和简化了系统管理的工作。
通过特定的系统管理工具进行监控和管理, MQ 不仅自身提供了 GUI 和文本化监控工具来监测和显示对象的状态 , 并且能够利用各类系统管理软件对整个网络运行状况实施监控;如 Tivoli Manager for MQ 就是一个功能强大的综合管理工具:它为控制消息和应用程序框架提供了一个集中管理平台。它捕获和显示 MQ 的事件,并能发现新的队列管理器以及相应的对象,这些对象可以通过中央控制台进行定义和配置。除此之外,许多第三方厂家也提供有类似的管理工具。
除了以上这三种管理手段之外, MQ 还提供了系统管理的编程接口,通过该接口用户可以编写应用程序从而进行自动化的实时监控及管理。 MQ 的系统管理接口有两种,即 Programmable Command Format (可编程命令格式,简称 PCF )和 MQ Administration Interface ( MQ 管理接口,简称 MQAI )。
MQ 应用开发编程:
MQ 的应用开发编程主要是指使用 MQI , AMI , ActiveX 编程接口来进行消息的发送和接受以及相关的应用开发的工作。
MQI 即 Message Queue Interface :
它提供的基础而丰富的编程接口,而且也提供了最全面的操作组。。它的使用比较广泛,支持大部分平台和程序语言。
比如:操作系统支持 AS/400 、 SunOS 、 AIX 、 Windows 等,编程语言支持 C 、 C++ 、 VB 、 PL/I 、 COBOL 、 RPG 、 Delphi 等。
MQI 可以用来处理:
连接和断开连接一个队列管理器
打开和关闭队列对象
发送、浏览和获得消息
查询和设置对象属性
事务处理管理
消息分组
AMI 即 Application Message Interface :
其可向程序员提供一种可以用于处理队列管理器对象非常简单的接口。利用 AMI ,程序员不必深入了解所有 MQI 调用,他们只要专注于应用程序的商业逻辑即可。这就意味着在编程时出现的错误更少,具有更高的处理业务及技术改变的灵活性。 AMI 减少了编写新应用程序所需的代码数量。
可采用以下方式发送和接收消息 AMI :
发送 - 遗忘,不需要回复
分配表,将消息发送到多个目的地
请求 / 回复,发送消息的应用程序需要请求消息的回复
发布 / 预订,由代理管理消息的分配
2、 MQ Delphi 开发
由于网上关于 MQ 的开发资料比较少,在最近的一个项目中,有人需要用 MQ 来做开发,由于多 MQ 的编程不是很了解,所以不知道 Delphi 和 MQ 之间是如何关联的。
在 MQ 的编程模式中,目前我查证的资料中,只有 MQI 是支持 Delphi 开发的,另外由于 Delphi 的第三方组件也比较多,美国有一家公司提供了一个 Delphi for MQ 的组件,使用起来非常简单,可惜该组件需要收费。
Delphi 采用了 MQI 接口,官方也提供了文档指导
http://www-1.ibm.com/support/docview.wss uid=swg24007060 ,文档说明了 Delphi MQI 的 API 接口和 C 的类似,官方的编程 MQI 编程指导手册对于 Delphi 同样也很适用。在 C 语言中使用了指针并且使用了另外一种定义字符串长度的方式,就是在结尾处用 #0 做标记;在 Pascal 中, @ 操作符被用来传递指针的值。
3、 实例
MQI 的编程用的最多的主要是 13 个常见函数的调用:
MQCONN
MQCONNX
MQDISC
MQOPEN
MQCLOSE
MQPUT1
MQPUT
MQGET
MQINQ
MQSET
MQBEGIN
MQCMIT
MQBACK
MQCONN 演示
今天展示的一个实例就是演示成功的打开对队列管理器进行连接,并学习一些相关的概念。
系统环境: Win2000 Pro + SP4, MQ5.3,Delphi7
Delphi中需要创建一个窗体,一个Memo,一个Button
procedure TForm1.btnCoonClick(Sender: TObject);
var
Hconn : MQHCONN; //连接句柄
CompCode, Reason : MQLONG; //完成代码,原因代码
QMgrName : string; //队列管理器的名字,这里没有用MQ的自定义类型变量
begin
QMgrName := 'DMQ';//
MQCONN ( PChar(QMgrName),
// pchar相当于C里面的char *,以#0结尾,但在使用中不必为它分配内存
HConn,
Compcode,
Reason);
{CompCode有四种状态:
MQCC_OK = 0;
MQCC_WARNING = 1;
MQCC_FAILED = 2;
MQCC_UNKNOWN = -1;
}
if CompCode = MQCC_FAILED then
begin
Memo1.Lines.Add('连接失败');
Memo1.Lines.Add('连接的队列管理器的名字是:'+QMgrname);
Memo1.Lines.Add(IntToStr(Reason));
end;
if CompCode = MQCC_WARNING then
begin
Memo1.Lines.Add('警告');
end;
if CompCode = MQCC_OK then
Memo1.Lines.Add('连接成功');
end;
看看,其实很简单吧?下次我们在研究其他的函数,来进行MQ的消息发送和获得的演示。