在你的应用程序中利用IBM WebSphere MQ消息中间件提供Java消息服务开放接口。html
IBM WebSphere MQ(WMQ)是一套面向消息的中间件(message-oriented middleware,MOM),经过使用消息和队列简化应用程序之间的通讯,WMQ支持点到点的和发布/订阅消息,支持多种平台,包括Windows、AIX、HP-UX和Sun Solaris,它特别适合目前的异构计算环境。java
对于Java开发者而言,WMQ为Java应用程序提供了两种接口:windows
1.为Java提供MQ基础类 - 一个基于WMQ本地接口的Java接口。session
2.MQ JMS - Java消息服务(Java Messaging Service ,JMS)1.1接口的实现。app
JMS经过开启Java应用程序发送和接收消息扩展了Java的互操做性,JMS应用程序可使用点到点或发布/订阅模式进行消息交换。工具
本文描述的是使用WMQ和JMS进行开发的过程,重心集中在点到点消息,经过下面几步教你如何使用Java类编写JMS接口:性能
1.建立WMQ对象测试
2.建立JMS管理对象ui
3.解释JMS代码url
4.运行一个实例类发送消息和从WMQ接收消息
WMQ安装
本文使用的是winxp上的MQ 版本 7(能够从http://www.ibm.com/developerworks/downloads/ws/wmq/learn.html下载试用版),在windows上的安装是很是简单的,一路默认就能够完成安装。
若是你尚未使用过WMQ也不要担忧,你可使用基于Eclipse的WebSphere MQ管理器,它是一个简单的用于管理WMQ的图形工具。
建立MQ对象:队列管理器和队列
队列是用来存储消息的,直到应用程序处理完毕才释放,队列管理器拥有并管理队列,要建立一个队列管理器和队列,按如下步骤启动WebSphere MQ管理器:开始?全部程序? IBM WebSphere MQ ? WebSphere MQ Explorer。图1显示了启动WebSphere MQ管理器时的样子。
图1 WebSphere MQ 管理器
在MQ管理器中执行下列操做建立一个队列管理器:
1.在导航视图下,右击“队列管理器”,选择“新建--队列管理器”,启动建立队列管理器向导。
2.在第一步中输入队列管理器的名字“TestMQ”,点击“下一步”。如图2所示。
图2 建立队列管理器,第一步:输入队列管理器名称
3.在第二步和第三步都点击“下一步”,进入第四步,肯定选中了“建立一个TCP/IP监听器”,而后输入一个未使用的端口号,点击“完成”。如图3所示。
图3 建立队列管理器,第四步:检查队列管理器的监听器端口号。
接下来建立两个队列:IN.QUEUE 和 OUT.QUEUE。你就能够将消息写入IN.QUEUE,从OUT.QUEUE读取消息。
1.在TestMQ下,右击“队列”?“新建”?“本地队列”启动“新建本地队列”向导。
2.在名称区域,输入IN.QUEUE,点击“完成”。如图4所示。
图4 建立队列向导:输入队列名称,其它属性值保留默认值
3.重复上面的步骤建立好队列OUT.QUEUE。
建立JMS管理对象
JMS定义了一个通用的接口来发送和接收消息,只要与之通讯的程序兼容JMS便可,点到点的JMS接口是:
1. javax.jms.QueueConnection - 这个接口提供一个到JMS提供程序的链接,用于建立会话对象。
2.javax.jms.QueueSession - 这个接口为产生和消耗消息提供上下文呢,包括建立QueueSender和QueueReceiver的方法。
3. javax.jms.QueueSender - 这个接口用于向队列发送消息,javax.jms.QueueReceiver用于从队列接收消息。
为了让你的代码能够在不一样的消息提供程序间有良好的移植性,你必须在你的应用程序中使用javax.jms中的标准JMS接口,全部特定厂家的信息都封装在javax.jms.QueueConnectionFactory 和 javax.jms.Queue中,这些管理对象可使用厂家提供管理工具进行构建,存储在JNDI命名空间中,JMS应用程序能够从命名空间中检索这些对象,这时就不须要知道是哪一个厂家提供的了。
按照下面的步骤使用Websphere MQ管理器建立管理对象,存储在基于文件的目录下:
1.在JMS-管理对象上点击右键?添加初始上下文。
2.在屏幕1上:
为“JNDI存储在哪里”选择“文件系统”
在关联目录处,输入C:\JNDI-Directory(前提是这个目录已经存在)
注意工厂类和提供程序URL,由于你将会在Java代码中使用到(如图5所示)
图5 添加初始上下文向导:你将在样例类中使用工厂类和提供程序URL
3.你的管理器如今应该如图6所示
图6 添加初始上下文后的MQ管理器:你能够在MQ管理器中轻易地建立JMS管理对象
在新的初始上下文中,建立一个链接工厂。
1.在链接工厂上点击右键?新建?链接工厂,在第一个屏幕上,在名称区域输入“TestQM_QCF”,点击“下一步”,在JNDI查找中你就使用TestQM_QCF了。
2.将类型设置为“队列链接工厂”,点击“下一步”。如图7所示。
图7 新建链接工厂向导:用于点对点消息的队列链接工厂
3.保持传送类型为聚集,点击下一步,当WMQ和应用程序在同一机器上时使用聚集传输。
4.在下一页面点击下一步(无需修改设置)。
5.在最后一页,选择链接标签,点击“选择”按钮选择TestQM做为“基础队列管理器”。如图8所示。
图8 新建链接工厂向导:链接工厂被包装为TestMQ
6.点击“完成”。
接下来建立目的地,对应WMQ消息的JMS管理对象。
1.在目的地上点击右键?选择“新建”?“目的地”。
2.在第一页上,在名字区域输入INInputTestQueue做为名字,确保类型设置为队列了,点击“下一步”。如图9所示。
图9 新建目的地向导:使用InputTestQueue查找IN.QUEUE
3.第二页保持默认设置不变,点击“下一步”。
4.在最后一页:
在队列管理器区域,点击“选择”按钮选择TestQM。
在队列区域,点击“选择”按钮选择IN.QUEUE。
5.点击“完成”。
重复上述步骤建立另外一个目的地:OutputTestQueue,它对应OUT.QUEUE
理解示例类
若是你编写过JMS应用程序,就很容易理解JNDIUtil 和 Tester示例类(从http://assets.devx.com/sourcecode/WebSphereMQ_JMSSource&Classes.zip下载Java源文件和编译好的类),你建立的JMS管理对象隐藏了全部厂家专利实现。
JNDIUtil类
JNDIUtil包括使用名字经过JNDI查找检索对象的方法,参考清单1,你可使用这个类中的方法检索你在MQ管理器中定义的JMS对象的引用状况。
清单1 JNDIUtil.java
Tester类
Tester类向OUT.QUEUE中写入消息,从IN.QUEUE中读取消息。参考清单2.
清单2 Tester.java
开始点是链接工厂查找,这个工厂用于建立一个链接:
链接对象用于建立一个会话:
要将消息写入IN.QUEUE queue,查找前面建立的目的地对象OutputTestQueue:
最后建立一个QueueSender对象将消息写入队列:
从OUT.QUEUE读取消息的过程相同,但使用的是QueueReceiver。
编译运行示例类
当你安装WMQ时会自动将编译和运行示例类须要的jar文件添加到CLASSPATH环境变量中,须要的jar文件位于C:\Program Files\IBM\WebSphere MQ\Java\lib,包括JMS和JNDI须要的jar。
在运行Tester类以前,使用MQ管理器向IN.QUEUE增长一条测试消息:
1.在 IN.QUEUE上点击右键,选择放入测试消息。
2.输入任意文本,点击放入消息。
若是你尚未在IN.QUEUE队列中放入过消息,Tester类会显示“队列中无消息”。
要运行Tester类,将Tester.class 和 JNDIUtil.class添加到CLASSPATH,而后在命令提示符输入:
应用程序向OUT.QUEUE写入一条消息,并显示从IN.QUEUE检索到的消息,要检查发送到OUT.QUEUE中的消息,进入MQ管理器,在OUT.QUEUE上点击右键?选择“浏览消息”便可。
企业中的Java和WMQ MOM
在大型企业环境下,能够充分利用WMQ的性能和稳定性优点,只要你的代码遵循Java标准接口,你就能够受益。