`
JAVA天地
  • 浏览: 673459 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

WebSphere MQ程序设计初探

阅读更多

(引用位置:::URL::http://java.chinaitlab.com/base/529586.html)
IBM 的WebSphere MQ产品可以用来方便地实现分布式异构系统之间的消息传递。对于大型的分布式系统,使用MQ进行数据通信是可以说是非常有效的,而 且适用于异构环境(如NT和多种UNIX之间通信)。本文主要介绍:MQ的核心组件介绍、MQ环境的搭建以及利用JAVA对MQ队列管理器的操作的程序设 计,希望能起到抛砖引玉的作用。
第一部分、MQ的核心组件介绍
MQ的核心组件包括:队列管理器(QueueManager)、队列(Queue)、通道(Channel)、消息(Message)和集群(Cluster)。
队列管理器(QueueManager)提供队列服务,管理属于该队列管理器的队列和通道等所有MQ对象。
队列(Queue)是用于存储消息(Message)的数据结构,有四种类型:本地队列(LocalQueue)、远程队列(RemoteQueue)、别名队列(AliasQueue)和模型队列(ModelQueue),最常用到的是本地队列和远程队列。
通道(Channel)是提供了从一个队列管理器到其他队列管理器的数据传输路径。通道类型有若干种,其中常用的是发送方通道(SenderChannel)和接收方通道(ReceiverChannel)。
消息(Message)是应用程序之间传递的一系列字节数据,MQ传递的消息有两部分组成:消息描述符(MessageDescriptor)和应用数据(ApplicationData)。默认最大传递的消息大小是4MB,可以根据需要进行设置,最大可到100MB。
集群(Cluster)是分布式网络上的多个队列管理器的集合。(本文不涉及集群的具体内容)

第二部分、MQ环境的搭建
本文搭建的环境以Windows平台为例,涉及其他平台的请读者查阅相关文档。
具体搭建步骤:
1、根据安装向导安装IBM WebSphere MQ v5.3软件,安装路径为:D:\IBM\WebSphere MQ。

2、 安装成功后,请使用命令echo %classpath%检查classpath变量中是否已经把D:\IBM\WebSphere MQ\Java\ lib下面的jar文件包含进来,如没有包括请进行手工添加,本文要用到的2个关键的是:com.ibm.mq.jar和connector.jar。使 用echo %path%检查path变量中是否已经把D:\IBM\WebSphere MQ\bin包含进来,如没有包括请进行手工添加。

3、创建一个配置文本文件,文件名为config.txt,内容如下(请读者到附件下载):
* 更改QM的字符集编码(CCSID)
ALTER QMGR FORCE CCSID(1381)
* 定义本地队列
DEFINE QLOCAL('LQ_SAMPLE') REPLACE +
USAGE(normal) +
DEFPSIST(YES)

4、创建一个批处理文件,文件名为mqsetup.bat,内容如下(请读者到附件下载):
rem 创建缺省队列管理器,拥有100个句柄,使用线性循环日志,容量为 1024 × 4 K/文件,主文件10个,辅文件20个
echo Creating QM_SAMPLE
crtmqm -t 5000 -h 100 -lc -lf 1024 -lp 10 -ls 20 -q QM_SAMPLE
rem 设置cpu个数为1
setmqcap 1
rem 启动队列管理器
echo Starting Queue Manager
strmqm QM_SAMPLE
rem 从配置文件中读入初始化命令
echo Running config
runmqsc QM_SAMPLE < config.txt
rem 停止队列管理器
amqmdain end QM_SAMPLE
rem 将队列管理器设置为自动启动
amqmdain auto QM_SAMPLE
rem 创建队列侦听器,使用1414端口
amqmdain crtlsr QM_SAMPLE -t TCP -p 1414
rem 修改MQ参数,采用AdoptNewMCA方式
amqmdain reg QM_SAMPLE -c add -s Channels -v AdoptNewMCA=ALL
rem 修改MQ参数,采用KeepAlive方式
amqmdain reg QM_SAMPLE -c add -s TCP -v KeepAlive=Yes
rem 重新启动队列管理器
amqmdain start QM_SAMPLE

5、运行mqsetup.bat,检查运行结果输出是否无误,如有错误,请仔细根据上述步骤进行检查并纠错。

6、在命令窗口中,输入dspmq,看是否显示如下结果:
QMNAME(QM_SAMPLE) STATUS(正在运行)

7、在命令窗口中,输入runmqsc回车,进入mq交互操作环境,输入display queue(LQ_SAMPLE),看是否显示如下结果:
AMQ8409: 显示队列细节。
DESCR(WebSphere MQ Default Local Queue)
PROCESS( ) BOQNAME( )
INITQ( ) TRIGDATA( )
CLUSTER( ) CLUSNL( )
QUEUE(LQ_SAMPLE) CRDATE(2006-10-31)
CRTIME(16.17.01) ALTDATE(2006-10-31)

8、输入end退出mq交互操作环境。
自此,NT平台上的最基本的MQ环境搭建完成了。

第三部分、利用JAVA对MQ队列管理器的操作的程序设计
本文涉及的程序在JDK 1.4.2上测试通过。文件名为MQSample.java,程序内容如下:
import java.io.IOException;
import com.ibm.mq.MQC;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;

public class MQSample{
//定义队列管理器和队列的名称
private static String qmName;
private static String qName;

public static void main(String args[]) {
try{
//第一个参数是队列管理器名,第二个参数是队列名
qmName = args[0].trim();
qName = args[1].trim();
}catch(Exception e){
System.out.println("USAGE: java MQSample 队列管理器名 队列名");
System.exit(0);
}

try {
//定义并初始化队列管理器对象并连接
MQQueueManager qMgr = new MQQueueManager(qmName);

// 设置将要连接的队列属性
// Note. All WebSphere MQ Options are prefixed with MQC in Java.
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

//连接队列
MQQueue localQ = qMgr.accessQueue(qName, openOptions);

//定义一个简单的消息
MQMessage putMessage = new MQMessage();
putMessage.writeUTF("Hello World!");

//设置写入消息的属性(默认属性)
MQPutMessageOptions pmo = new MQPutMessageOptions();

//将消息写入队列
localQ.put(putMessage,pmo);

MQMessage retrievedMessage = new MQMessage();
retrievedMessage.messageId = putMessage.messageId;

//设置取出消息的属性(默认属性)
MQGetMessageOptions gmo = new MQGetMessageOptions();

// 从队列中取出消息
localQ.get(retrievedMessage, gmo);
String msgText = retrievedMessage.readUTF();

System.out.println("The message is: " + msgText);

//关闭队列
localQ.close();
//从队列管理器断开
qMgr.disconnect();
}catch (MQException ex) {
System.out.println("A WebSphere MQ error occurred : Completion code "
+ ex.completionCode + " Reason code " + ex.reasonCode);
}catch (IOException ex) {
System.out.println("An error occurred whilst writing to the message buffer: " + ex);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
以 上程序接受2个输入参数,第一个参数是队列管理器名,第二个参数是队列名。首先初始化MQQueueManager对象,以队列管理器的名称作为参数。这 里用的是最简单的MQQueueManager,只能连接本机的队列管理器。推荐使用MQQueueManager(String qmName, Hashtable hashtable)构造函数,如下:
private static Hashtable properties = new Hashtable();
properties.put("hostname", "主机名");
properties.put("port", new Integer(1414));
......
MQQueueManager qMgr = new MQQueueManager(qmName,properties);
可以使应用程序访问MQ服务器的特定端口。
然 后通过QueueManager的accessQueue()方法连接队列,该方法返回MQQueue对象。然后定义了MQMessage对象,通过 writeUTF()将字符串写入消息,进而通过MQQueue的put()方法将消息放入队列中,然后通过get()方法取出消息,最后显示在 console上。在程序结尾,执行MQQueue的close()方法关闭队列,执行MQQueueManager的disconnect()断开和队 列管理器的连接。

对MQSample.java编译后,输入java MQSample QM_SAMPLE LQ_SAMPLE运行,得出如下结果:
The message is: Hello World!

在作者调试以上程序时,出现了一个错误:java.lang.NoClassDefFoundError: javax/resource/ResourceException
经过在IBM网站上进行搜索,说是classpath中没有指定connector.jar文件,但是我已经在Eclipse开发环境中进行设置。
通过仔细分析,终于发现是由于JDK的缘故(我用的是WebSphere6.0里的JDK),切换到SUN的JDK就正常了。
所以,如果你需要使用IBM的JDK的话,那么要把MQ的这几个包覆盖到IBM JDK的相关路径下。

到此,读者应该了解了MQ有哪些主要的对象,环境怎么搭建(请仔细研究config.txt和mqsetup.bat文件),以及如何对MQ的对象进行操作。(引用位置:::URL::http://java.chinaitlab.com/base/529586.html)

分享到:
评论

相关推荐

    IBM WebSphere MQ 安装包

    3. **版本信息**:这里提供的安装包为WS_MQ_V7.5.0.2_TRIAL_FOR_WINDOWS_ML,表明这是WebSphere MQ的7.5.0.2试用版,专为Windows平台设计。"ML"通常代表“Multilingual”,意味着该版本支持多语言。 4. **安装与...

    IBM WebSphere MQ入门教程.pdf

    IBM WebSphere MQ 是一种基于消息队列的中间件,用于实现不同的应用程序之间的异步通信。下面是对 IBM WebSphere MQ 的入门教程的总结,涵盖了 WebSphere MQ 的原理、体系结构、重要特点和应用场景等方面的知识点。 ...

    WebSphere MQ程序设计

    ### WebSphere MQ程序设计知识点详解 #### 一、MQ的核心组件介绍 MQ(Message Queuing)作为IBM的一款成熟的企业级消息中间件,在分布式系统中扮演着重要的角色。它支持多种平台间的异构通信,能够有效地解决...

    IBM WebSphere MQ 技术白皮书.doc

    * 架构图:WebSphere MQ 的架构图包括消息队列、队列管理器和应用程序等组件。 * 架构说明:WebSphere MQ 的架构基于消息队列,能够实现高效、可靠和灵活的消息传递。 产品功能特性 WebSphere MQ 的产品功能特性...

    WebSphere MQ 系统管理指南 6.0

    总之,《WebSphere MQ 系统管理指南 6.0》不仅是一份技术手册,更是IT团队在设计、部署和维护基于WebSphere MQ的消息传递解决方案时不可或缺的伙伴。它提供了深入的理论知识、实用的操作指南和先进的策略建议,帮助...

    MQ,websphere mq

    通过阅读这些书籍,开发者和系统管理员可以掌握WebSphere MQ的全面知识,从而更好地设计、实施和维护基于MQ的消息传递系统。结合实际项目经验,可以提升解决复杂系统集成问题的能力,为企业信息系统提供高效、可靠的...

    Linux 上的 WebSphere MQ 开发快速入门

    本文将介绍如何在 Linux 上安装和配置 WebSphere MQ,以及如何使用 Java 应用程序开发 MQ 环境。本文将通过示例应用程序说明如何向队列发送消息和从队列接收消息。 WebSphere MQ 简介 WebSphere MQ 是一种可靠的...

    WebSphereMQ_V7.5.0.2_for_Windows(4-1)

    WebSphere® MQ (也称MQSeries)以一致的、可靠的和易于管理的方式来连接应用程序,并为跨部门、企业范围的集成提供了可靠的基础。通过为重要的消息和事务提供可靠的、一次且仅一次的传递,Websphere MQ 可以处理...

    websphere MQ 8.0 自带jar包

    WebSphere MQ 8.0 自带的 JAR 包是一组关键组件,它们构成了 IBM 的消息中间件解决方案,用于在不同应用程序之间可靠地传递数据。这些 JAR 文件位于 `WebSphere MQ\java\lib` 目录下,是开发、配置和运行与 ...

    WebSphere MQ介绍教程

    5. 高可用性和弹性:WebSphere MQ在设计上考虑了系统的高可用性和弹性,提高了监听器的吞吐量,并增加了选择器的数量,扩展了其能力,最高可增加250%,且改善了延迟。 6. 简化的使用和配置:v7版本特别强化了易用性...

    IBM Websphere MQ入门教程

    IBM Websphere MQ是IBM公司开发的一款消息队列中间件,旨在提供一个可靠的异步通信机制,实现不同应用程序之间的数据交换和集成。下面是该教程的知识点总结: 中间件的概念和优点 中间件是一种特殊的软件系统,它...

    Websphere MQ入门教程-使用IBM Websphere MQ

    IBM WebSphere MQ(原名MQSeries)是IBM提供的一款企业级的消息中间件产品,它允许不同应用程序、系统和网络在不同时区和平台之间交换消息。本教程将带你深入理解WebSphere MQ的基本概念和使用方法,帮助你快速入门...

    Websphere MQ入门教程

    最后,我们将学习如何利用WebSphere MQ进行程序设计和编写,包括API的使用和实例程序,帮助开发者创建高效、可靠的分布式应用程序。 总的来说,WebSphere MQ入门教程覆盖了从理论基础到实际操作的全面知识,无论你...

    非常全面的WebsphereMQ的PDF学习资料

    个人收集整理,非常全面的WebsphereMQ的PDF学习资料。Websphere MQ Programming Guide,Websphere MQ Using C++,WebSphere MQ Using Java,WEBSPHERE MQ6.0 JAVA编程,WebSphere MQ基础教程,IBM WEBSPHERE MQ教程...

    Websphere MQ入门教程7

    【Websphere MQ入门教程7】是一本专为初学者和WebSphere MQ系统管理员及开发者设计的实用指南。全书涵盖了WebSphere MQ的基础知识、系统管理和应用开发等多个方面,旨在帮助读者深入理解这一消息中间件的工作原理和...

    WebSphere_MQ_V6.0.zip

    WebSphere MQ,原名MQSeries,是IBM推出的一款企业级的消息中间件产品,它在IT领域扮演着重要的角色,尤其在分布式系统、企业应用程序集成(EAI)以及业务流程自动化中发挥着关键作用。WebSphere MQ V6.0是这个系列...

    IBM WebSphere MQ 简介和概述

    在应用程序设计方面,WebSphere MQ支持同步和异步两种模式。同步模式下,发送方(程序A)等待接收方(程序B)的响应,而异步模式则允许发送方和接收方独立运行,提高了系统的可扩展性和容错性。例如,程序A将消息放...

Global site tag (gtag.js) - Google Analytics