1、WebSphereMQ技术交流 主要内容 WebSphere简介WebSphereMQMQ编程实例 WebSphere简介 WebSphere是IBM的集成软件平台 它包含了编写 运行和监视全天候的工业强度的随需应变Web应用程序和跨平台 跨产品解决方案所需要的整个中间件基础设施 如服务器 服务和工具 WebSphere提供了可靠 灵活和健壮的集成软件 WebSphere集成参考体系结构 WebSphere主要产品 WebSphereApplicationServerWebSphereApplicationServerCommunityEditionWebSphereDataPowerWebS
2、phereEnterpriseServiceBusWebSphereMessageBrokerWebSphereMQWebSphereProcessServerWebSphereExtendedDeploymentWebSphereIntegrationDeveloperWebSpherePortal MQ的基本概念 队列管理器消息队列通道 队列管理器 队列管理器是MQ系统中最上层的一个概念 由它为我们提供基于队列的消息服务 消息 在MQ中 把应用程序交由MQ传输的数据定义为消息 消息有两部分组成 消息描述符 MessageDiscription或MessageHeader 描述消息的特征 如
3、 消息的优先级 生命周期 消息Id消息体 MessageBody 即用户数据部分 在MQ中 消息分为两种类型 非永久性 non persistent 消息和永久性 persistent 消息在MQ中 还有逻辑消息和物理消息的概念 利用逻辑消息和物理消息 我们可以将大消息进行分段处理 也可以将若干个本身完整的消息在应用逻辑上归为一组进行处理 队列 队列是消息的安全存放地 队列存储消息直到它被应用程序处理 消息队列以下述方式工作 a 程序A形成对消息队列系统的调用 此调用告知消息队列系统 消息准备好了投向程序B b 消息队列系统发送此消息到程序B驻留处的系统 并将它放到程序B的队列中 c 适当时间
4、后 程序B从它的队列中读此消息 并处理此信息 队列 在MQ中 队列分为很多种类型 其中包括 本地队列 远程队列 模板队列 动态队列 别名队列等 本地队列又分为普通本地队列和传输队列 普通本地队列是应用程序通过API对其进行读写操作的队列 传输队列可以理解为存储 转发队列 比如 我们将某个消息交给MQ系统发送到远程主机 而此时网络发生故障 MQ将把消息放在传输队列中暂存 当网络恢复时 再发往远端目的地 远程队列是目的队列在本地的定义 它类似一个地址指针 指向远程主机上的某个目的队列 它仅仅是个定义 不真正占用磁盘存储空间 通道 通道是MQ系统中队列管理器之间传递消息的管道 它是建立在物理的网络连
5、接之上的一个逻辑概念 在MQ中 主要有三大类通道类型 即消息通道 MQI通道和Cluster通道 消息通道是用于在MQ的服务器和服务器之间传输消息的 需要强调指出的是 该通道是单向的 它又有发送 sender 接收 receive 请求者 requestor 服务者 server 等不同类型 MQI通道是MQClient和MQServer之间通讯和传输消息用的 与消息通道不同 它的传输是双向的 群集 Cluster 通道是位于同一个MQ群集内部的队列管理器之间通讯使用的 MQ的工作原理 MQ的通讯模式 点对点通讯多点广播发布 订阅 Publish Subscribe 模式群集 Cluster
6、MQServer和MQClient MQ产品分为Server和Client两种版本 在MQServer的运行环境下 有队列管理器 队列 消息通道等对象 它提供全面的消息服务 MQClient为我们提供了一个MQ应用程序的开发和运行环境 它是MQAPI的Client实现 编程性 MQ支持多种编程语言 其中包括 C C Java VisualBasic COBOL PL 1 RPG等 同时也支持多种流行的开发工具 如 WebSphereStudioApplicationDeveloper PowerBuiler MicrosoftVisualC VisualBasic Delphi等 并且 MQ在
7、不同平台上提供统一的编程接口 仅需重新编译就可完成不同平台间程序的移植 MQ配置 建立QueueManager 可以通过如下语句执行 crtmqm lp3 ls2CERPTamqmdainautoCERPTamqmdaincrtlsrCERPT tTCP p1414amqmdaincrtchiCERPTSYSTEM CHANNEL INITQamqmdainstartCERPT注意 MQ有大小写区分 建议有关队列管理器 队列名等全部用大写 另外 1414为默认端口号 MQ配置 建立本地队列DEFINEQL CERPT LOCAL REPLACE建立本地队列 用于传输DEFINEQL CMEST
8、 XMITQ USAGE XMITQ TRIGGERTRIGTYPE FIRST TRIGDATA CERPT CMEST INITQ SYSTEM CHANNEL INITQ REPLACE建立远程队列DEFINEQREMOTE CMEST REMOTE RNAME CMEST LOCAL RQMNAME CMESTXMITQ CMEST XMITQ DEFPSIST YES REPLACE MQ配置 建立接收通道DEFINECHL CMEST CERPT CHLTYPE RCVR REPLACE建立传送通道 需要远程IP 及使用端口号 如下使用1414 默认为 1414DEFINECHL
9、CERPT CMEST CHLTYPE SDR TRPTYPE TCP CONNAME 10 35 8 63 1414 XMITQ CMEST XMITQ REPLACE 建立MQI通道 用于客户端与服务端通讯DEFINECHANNEL CGCESERVER CHLTYPE SVRCONN REPLACE MQ编程 以C 语言为例 一个MQ应用的开发流程如下 1 安装MQ 安装完毕后 在C WINDOWS assembly目录下将会出现一下几个GACamqmdnet amqmdnm amqmdxcs 2 创建应用程序 添加引用 在MQ安装目录下找到WebSphereMQ bin目录下的amqm
10、dnet dll将其引用进来 MQ编程 MQ编程 3 进入编程阶段 初始化 应用程序在开始需要引用MQ的命名空间 usingIBM WMQ 连接队列管理器 应用程序连接队列管理器是通过MQQueueManager的构造函数实现 队列管理器对象构造完成后就已经建立了与队列管理器的连接 MQ编程 断开队列管理器 应用程序中在运行期间要断开队列管理器 可以使用队列管理器类的Disconnect 函数 该函数没有任何参数 如果应用程序在运行中需要重新连接队列管理器 可以使用Connect StringqueueManagerName MQConnectOptionsmqcno 函数 在该函数中应用程序
11、可以重新指定队列管理器名和连接选项 MQ编程 访问队列 MA7P提供了一个处理队列的类MQQueue 该类的实例可以通过已经建立连接的MQQueueManager对象的AccessQueue StringqueueName intopenOptions 函数来获得发送 接收消息 MA7P提供了一个消息对象MQMessage 使用MQQueue类的Put和Get方法可以实现向 从队列发送 接收消息的功能 实例 MQ配置实例创建队列创建通道消息传输实例发送消息程序接收消息程序文件传输实例发送文件程序接收文件程序 参考资料 MQforWindows安装入门 pdfMQ Net解决方案 pdfMQV6 0Using Net pdfIBMdeveloperworks Q A 谢谢