在你开始前
在以下部分中,了解如何从本教程中获得最大收益。
关于本教程
在本教程中,您将逐步了解如何配置WebSphere MQ和Rational Application Developer来进行客户机传输,远程排队和JMS发布/订阅编程。 提供了示例应用程序以及有关运行这些应用程序的说明,以演示和测试这些功能。
目标
在本教程中,您将学习如何:
- 配置和测试WebSphere MQ客户端传输
- 配置和测试WebSphere MQ远程排队
- 配置和运行JMS发布/订阅应用程序
先决条件
如果您是Java程序员,并且需要了解如何使用WebSphere MQ和Rational Application Developer编写和测试JMS程序,那么本教程适合您。 假定您具有Java的中级知识和JMS的入门知识。 本教程中的说明还假定您已执行第1部分中的说明,因为它们是基于在该教程中创建和测试的配置和示例代码构建的。
系统要求
本教程中的说明适用于Windows®环境,尽管熟悉其他操作系统的用户可能可以将其改编为在其操作系统中使用。
可通过以下链接找到本教程中使用的产品的系统要求:
接续第1部分
在本教程系列的第1部分中,您将简要概述企业消息传递系统和JMS。 然后,您将获得IBM用于JMS开发和测试的最新工具的描述,包括有关获取,安装和配置这些工具的详细说明。 为您提供了示例程序和说明,以帮助您使用这些工具并了解它们的工作方式。
本教程从第1部分的结尾处开始,进一步探讨使用Rational Application Developer(Application Developer)进行WebSphere MQ和JMS编程。 本教程中的说明假定您已经执行了第一篇教程中的说明,因为它们是基于在该教程中创建和测试的配置和示例代码构建的。
关于SupportPac ME01的说明
自从发布第1部分以来,已经发布了新版本的WebSphere MQ SupportPac ME01-WebSphere MQ Initial Context Factory。 您需要下载并安装此最新版本,本教程中的示例代码才能正常工作。 转到相关信息的链接。
致谢
我要感谢并感谢此SupportPac的作者IBM Hursley Labs的Gareth Matthews先生及时为该教程提供了此新版本。
WebSphere MQ配置
增强示例代码的功能
在接下来的两部分中,您将探索配置WebSphere MQ和JMS管理的对象的不同方法,以增强第一篇教程中提供的样本代码的功能。 您将要更改程序之间消息的流向,但是您将使用管理工具进行所有更改,而无需对程序进行任何更改。 这是JMS的关键优势,因为JMS将应用程序与底层消息传递实现分离开来,从而允许对消息传递系统配置进行重大更改,而无需更改应用程序。
WebSphere MQ客户端传输
WebSphere MQ提供了从Java程序到队列管理器的两种通信类型: bindings和client 。 这些通信类型在WebSphere MQ中称为传输类型。 绑定的传输类型要求Java程序与队列管理器在同一台计算机上执行,并使用从Java代码到队列管理器的本机接口。 在上一教程中执行的示例程序使用绑定传输。 客户端传输允许Java程序在运行队列管理器的计算机之外的工作站或其他计算机上单独运行。 队列管理器必须具有定义的服务器连接通道才能与Java客户端通信,并且专用网络路径必须可供Java客户端连接到队列管理器。
创建服务器连接通道
您使用WebSphere MQ资源管理器定义Java客户机所需的服务器连接通道。
- 从“ 开始”菜单启动WebSphere MQ Explorer。 (从这里开始,这些说明假定WebSphere MQ Explorer正在运行)。
- 单击Ender旁边的+号。
- 点击高级旁边的+号。
- 右键单击Channels,然后选择New> Server-connection Channel 。 (参见图1。 )
图1.创建新的服务器连接通道
- 在名称:字段中输入
java.channel
,然后单击完成 。
创建JMS管理对象
现在,您可以使用JMSAdminGUI创建一个QueueConnectionFactory
,该QueueConnectionFactory
使用您刚刚定义的服务器连接通道上的客户端传输。
- 从开始菜单启动Application Developer。 (从这里开始,这些说明假定Application Developer正在运行。)
- 使用C:\ workspace作为您的工作区目录。
- 使用右上角的视角切换按钮切换到Java视角。 (请参见图2。 )
图2.透视开关按钮
- 从主菜单中,选择“ 窗口”>“运行历史记录”>“ JMSAdminGUI” 。
- 选择“ 打开最近的配置文件:”按钮。 接下来,选择C:\ workspace / JMSAdminGUI / WMQ.config 。 (参见图3。 )
图3.选择配置文件
- 单击确定 。
- 从主菜单中,选择“ 对象”>“新建”>“ MQQueueConnectionFactory” 。
- 在“ 对象名称:”字段中键入
ClientEnder
。 - 单击标准属性选项卡。
- 从传输:下拉列表中选择客户端 。
- 在队列管理器:字段中输入
Ender
。 - 在端口:字段中输入
1414
。 - 在Channel:字段中输入
java.channel
。 - 在HostName:字段中输入
localhost
。 该对话框应如图4所示 。图4.创建新的MQQueueConnectionFactory
- 单击确定 。
- 退出JMSAdminGUI。
运行示例程序
运行样本程序以测试通过客户机传输对WebSphere MQ的访问。 请注意,尽管程序使用的是不同的队列连接工厂,但它们使用的队列与以前相同。
- 在Application Developer中,从主菜单中选择Run> Run History> QReceiverUI 。
- 在Connection:字段中输入
ClientEnder
,然后按Enter或单击Set 。 - 在Queue:字段中输入
EnderQ
并按Enter或单击Set 。 - 从主菜单中,选择“运行”>“运行历史记录”>“ QSenderUI” 。
- 在Connection:字段中输入
ClientEnder
,然后按Enter或单击Set 。 - 在Queue:字段中输入
EnderQ
并按Enter或单击Set 。 - 使“队列发送者”和“队列接收器”窗口均可见。
- 在“队列发件人”的“ 消息:”字段中键入文本,然后按Enter或单击“ 发送” 。
- 消息文本应出现在“队列接收器”窗口中。
- 完成后,通过单击右上角的X关闭两个窗口。
这些说明只能在单台计算机上使用。 我鼓励您在未安装WebSphere MQ的另一台计算机上运行QReceiverUI和QSenderUI程序,以真正演示客户端传输。 确保QueueConnectionFactory的host属性具有安装WebSphere MQ的计算机的名称,并且可以通过DNS或操作系统HOSTS将该名称解析为IP地址。 您还可以提供主机属性的IP地址。 还必须配置JMSAdminGUI用作其提供程序URL的队列管理器以进行客户端传输。
远程排队
到目前为止,您一直在传输的消息已放在一个队列中并从同一队列中读取。 尽管在某些情况下需要此配置,但企业消息传递系统的真正功能在于其将消息从一台计算机移动到另一台计算机的能力,从而使应用程序程序员不必知道网络和通信协议的细节。 在WebSphere MQ中,此消息流发生在队列管理器之间。 与上一节中描述的客户机配置不同,队列管理器之间不需要专用的网络连接。 当与接收队列管理器的连接不可用时,发送队列管理器可以存储消息,然后在恢复通信后立即转发累积的消息。
远程队列的本地定义
此方案的配置需要远程队列的本地定义 ,简称为远程队列 。 对于应用程序,远程队列看起来与普通本地队列没有什么不同。 但是,WebSphere MQ“知道”放置在远程队列上的消息实际上是发往另一个队列管理器上的队列的;它实际上是发往另一个队列管理器的。 然后采取必要步骤将消息移至目标队列。 该配置还需要传输队列 ,这是队列管理器用来保存发往另一个队列管理器的消息的一种本地队列。
在这里,您将在计算机上定义第二个队列管理器,并在该队列管理器上定义本地队列,这将成为远程队列的目标。
- 在WebSphere MQ资源管理器中,右键单击“ 队列管理器”,然后选择“ 新建”>“队列管理器” 。
- 在队列管理器名称:字段中输入
Petra
。 - 在“死信队列:”字段中键入
SYSTEM.DEAD.LETTER.QUEUE
。 - 单击下一步三下。
- 在“ 侦听端口号:”字段中键入
1415
(队列管理器Ender已经在使用默认端口1414,因此此队列管理器必须使用其他端口)。 - 点击完成 。
- 单击Petra旁边的+号。
- 右键单击队列,然后选择新建>本地队列 。 (参见图5。 )
图5.创建新队列
- 在名称:字段中输入
PetraQ
。 点击完成 。
现在,在原始队列管理器上,您需要创建一个传输队列和一个远程队列,将其指向第二个队列管理器上的目标队列。
- 右键单击Ender下的Queues ,然后选择New> Local Queue 。
- 在名称:字段中输入
Petra
。 (按照惯例,传输队列是为将用于进行通信的远程队列管理器命名的。) - 单击下一步 。
- 从用法:下拉列表中选择传输 。 (参见图6。 )
图6.配置传输使用队列
- 点击完成 。
- 右键单击Ender下的Queues ,然后选择New> Remote Queue Definition 。
- 在名称:字段中输入
RemotePetraQ
。 - 单击下一步 。
- 在“ 远程队列:”字段中键入
PetraQ
。 - 在“ 远程队列管理器:”字段中输入
Petra
。 - 在传输队列字段中输入
Petra
。 (参见图7。 )图7.配置远程队列
- 点击完成 。
沟通渠道
在队列管理器之间传输消息的机制称为通信通道 。 要创建通信通道,必须在每个队列管理器上创建一个通道定义-正在发送消息的队列管理器上的发送者通道 ,以及正在接收消息的队列管理器上的接收者通道 。 通信通道的两端具有相同的名称,通常指示消息流的方向。
- 在WebSphere MQ Explorer中,单击Petra下Advanced旁边的+号。
- 右键单击Channels,然后选择New> Receiver Channel 。 (请参见图8。 )
图8.创建接收器通道
- 在名称:字段中输入
Ender_2_Petra
。 - 点击完成 。
- 右键单击Ender下的Channels ,然后选择New> Sender Channel 。
- 在名称:字段中输入
Ender_2_Petra
。 - 单击下一步 。
- 在“ 连接名称:”字段中键入
localhost(1415)
。 - 在“ 传输队列:”字段中输入
Petra
。 (参见图9。 )图9.发送者通道属性
- 点击完成 。
- 右键单击Ender_2_Petra发件人通道,然后选择开始 。 (参见图10。)
图10.启动发送者通道
运行示例程序
现在,您可以运行示例程序来测试远程排队。 因为我们使用的是SupportPac ME01,所以您无需显式创建JMS管理的对象;因此,无需执行任何操作。 隐式JMS管理的对象可用于我们创建的队列管理器和队列。 您必须更改接收程序以将Petra队列管理器用作其提供程序URL,因为这是接收队列所在的位置。
- 在Application Developer中,从主菜单中选择Run> Run 。
- 在“ 配置:”列表中选择QReceiverUI 。
- 单击参数选项卡。
- 将java.naming.provider.url更改为
Petra
。 (参见图11。 )图11. QReceiverUI参数
- 点击应用 。 接下来,点击运行 。
- 在Connection:字段中输入
Petra
并按Enter或单击Set 。 - 在Queue:字段中输入
PetraQ
并按Enter或单击Set 。 - 从主菜单中,选择“运行”>“运行历史记录”>“ QSenderUI” 。
- 在Connection:字段中输入
Ender
,然后按Enter或单击Set 。 - 在Queue:字段中输入
RemotePetraQ
并按Enter或单击Set 。 - 使“队列发送者”和“队列接收器”窗口均可见。
- 在“队列发件人”的“ 消息:”字段中键入文本,然后按Enter或单击“ 发送” 。
- 您应该看到消息文本出现在“队列接收器”窗口中。
- 完成后,通过单击右上角的X关闭两个窗口。
为了更有效地演示远程排队,建议您在两台不同的计算机上设置WebSphere MQ,并在一台计算机上运行QSenderUI,在另一台计算机上运行QReceiverUI。 发送者通道的连接名称必须是可以解析为IP地址或实际IP地址的名称。 每台计算机上的每个队列管理器都可以使用端口1414(WebSphere MQ的默认端口),并且不必在连接名称后的括号中放置端口号。
在结束对WebSphere MQ配置的讨论之前,您应该了解客户机访问和远程排队可以结合使用。 因此,一台计算机上的应用程序可以使用客户端访问将消息放在第二台计算机上运行的队列管理器的远程队列上。 该队列管理器可以将消息传输到在第三台计算机上运行的队列管理器上的目标队列。 然后,在第四台计算机上运行的应用程序可以使用客户端访问从目标队列中检索消息。 图12中说明了这种情况。
图12.客户端访问和远程排队的组合
![客户端访问和远程排队相结合](https://i-blog.csdnimg.cn/blog_migrate/cfb7e28635b2d8c0c3a3b4c0000604c4.png)
发布/订阅
在接下来的两部分中,您将配置和运行示例程序,以演示JMS的发布/订阅功能。 在第一部分中,您将使用WebSphere MQ作为JMS提供程序来运行程序。 在第二部分中,您将使用Application Developer随附的WebSphere测试环境提供的内置JMS提供程序来运行程序。
使用WebSphere MQ运行样本程序
配置WebSphere MQ运行时环境
WebSphere MQ带有内置的消息代理,以支持发布/订阅应用程序。 您将运行提供的命令文件来设置代理,然后启动代理进行操作。
- 打开命令提示符,然后转到目录C:\ WSMQ \ Java \ bin。
- 键入
runmqsc Ender<mqjms_psq.mqsc
。 (参见图13。 )图13.准备WebSphere MQ消息代理
- 按Enter键 。
- 输入
strmqbrk -m Ender
并按Enter 。 - 关闭命令提示符。
安装示例代码
- 下载名为i-mqrad2.zip的示例代码文件。 (下载后,我将其重命名为mq6rad6_2.zip。)(单击可下载资源以获得链接)。
- 将此文件解压缩到系统上的文件夹中。 (在我的系统上,我将其提取到Windows桌面上的一个名为mq6rad6_2的文件夹中。)此文件夹中将有两个文件:MQPubSub.zip和EMQPubSub.zip。
- 在Application Developer中,从主菜单中选择File> Import 。
- 选择Project Interchange作为导入源,然后单击Next 。
- 在“ 从zip文件:”字段中,输入先前提取的MQPubSub.zip文件的位置。
- 选中MQPubSub项目旁边的复选框,然后单击Finish 。
查看示例代码
在设置,运行和测试示例代码之前,请看一下代码在做什么。 像在第1部分中一样,我们将不会花费任何时间来研究用户界面类,而只需花一些时间使用JMS代码。
ChatUser类
该ChatUser
类用于由ChatUserUI
发布消息,订阅,并从进入主题接收消息。 在点对点示例程序中,一个类用于发送消息,另一类用于接收消息。 发送和接收都由ChatUser
处理。 在ChatUser
中使用JMS编程的方法类似于点对点类中的方法。 这些是setConnection()
, setTopic()
, publishMessage()
和onMessage()
。 首先看清单1所示的setConnection()
。
清单1. setConnection方法
public void setConnection(String connectionName)
throws JMSException, NamingException, Throwable {
try {
close();
TopicConnectionFactory factory =
(TopicConnectionFactory) getInitContext().lookup(connectionName);
connection = factory.createTopicConnection();
publisherSession =
connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
subscriberSession =
connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
对close()
的调用可确保已正确关闭任何活动的JMS对象。 然后,通过JNDI进行查找,以获取名称作为connectionName
参数传入的TopicConnectionFactory
。 一旦TopicConnectionFactory
被检索和TopicConnection
创建两个TopicSession
创建参数,一个用于发布和一个订阅。 可以从单个会话发布和接收消息,但前提是未为该会话激活异步消息传递。 因为ChatUser
依赖于异步消息传递,所以我们需要两个会话。
下一个要查看的方法是setTopic()
。 在GUI中输入Topic
名称时,将调用此方法,如清单2所示。
清单2. setTopic()方法
public void setTopic(String topicName)
throws JMSException, NamingException, Throwable {
try {
stop();
Topic topic = (Topic) getInitContext().lookup(topicName);
publisher = publisherSession.createPublisher(topic);
subscriber = subscriberSession.createSubscriber(topic);
subscriber.setMessageListener(this);
connection.start();
sendEnterMessage();
} catch (Throwable e) {
publisher = null;
subscriber = null;
setExceptionMessage(e);
throw e;
}
}
对stop()
的调用可确保TopicConnection
被停止,并且所有活动的TopicPublisher
和TopicSubscriber
对象均被关闭。 然后使用topicName
参数从JNDI检索Topic
对象。 接下来,使用各自的TopicSession
对象创建TopicPublisher
和TopicSubscriber
对象。 为TopicSubscriber
设置了用于异步消息传递的消息侦听器; ChatUser
实现了MessageListener
接口,当消息到达订阅主题时,将异步调用ChatUser
的onMessage()
方法。 然后启动TopicConnection
并sendEnterMessage()
,它发布消息,宣布用户已进入聊天室。
发布消息时,将publishMessage()
方法,如清单3所示。
清单3. publishMessage()方法
public void publishMessage(String message) throws JMSException, Throwable {
try {
internalPublishMessage(getUserName() + ": " + message);
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
如您所见, publishMessage()
只是接受传入的String
,为用户名加上publishMessage()
,然后将String
传递给私有方法internalPublishMessage()
。 在internalPublishMessage()
,使用text
参数创建一个TextMessage
,并使用TopicPublisher
发布消息。
在ChatUser
查看的最后一个方法是onMessage()
,如清单4所示。
清单4. ChatUser onMessage方法
public void onMessage(Message message) {
String msgText = null;
try {
msgText = ((TextMessage) message).getText();
} catch (Throwable e) {
setExceptionMessage(e);
msgText = getExceptionMessage();
} finally {
setMessage(msgText);
}
}
每当消息发布到订阅的主题时,JMS都会调用此方法。 消息的文本用于设置ChatUser
对象的message
属性。 该代码应该看起来很熟悉,因为它与QReceiver
的onMessage()
方法QReceiver
。 使用JMS编程,接收发送到队列的消息和接收发布到主题的消息是完全相同的。
ChatMonitor类
除了没有消息发布功能之外, ChatUser
类与ChatMonitor
类非常相似。 该setConnection()
和setTopic()
方法很像在ChatUser
,除了没有关于发布代码,所以我们不会去对这些详细。 但是,让我们看一下清单5所示的onMessage()
方法。
清单5. ChatMonitor onMessage方法
public void onMessage(Message message) {
String msgText = null;
try {
msgText =
(((Topic) message.getJMSDestination()).getTopicName()
+ ": "
+ ((TextMessage) message).getText());
} catch (Throwable e) {
setExceptionMessage(e);
msgText = getExceptionMessage();
} finally {
setMessage(msgText);
}
}
首先,在getJMSDestination()
的Message
对象上调用getJMSDestination()
方法。因为已知消息来自Topic
,所以Destination
被转换为Topic
。 然后,对Topic
上的getTopicName()
进行调用,将主题名称添加到消息文本的前面,并将所得的String
用于设置ChatMonitor
的message
属性。
创建JMS管理的对象
现在,您将使用JMSAdminGUI定义TopicConnectionFactory
和一组供聊天程序使用的分层Topics
。
- 在Application Developer中,选择“运行”>“运行历史记录”>“ JMSAdminGUI” 。
- 单击“ 打开最近的配置文件:”按钮,选择C:/workspace/JMSAdminGUI/WMQ.config ,然后单击“ 确定” 。
- 从主菜单中,选择“ 对象”>“新建”>“ MQTopicConnectionFactory” 。
- 在“ 对象名称:”字段中键入
EnderTCF
。 - 单击标准属性选项卡。
- 在队列管理器:字段中输入
Ender
。 - 在Broker QMgr:字段中输入
Ender
。 (参见图14。 )图14.创建新的MQTopicConnectionFactory
- 单击确定 。
- 从主菜单中,选择“ 对象”>“新建”>“主题” 。
- 在“ 对象名称:”字段中键入
Java
。 - 单击标准属性选项卡。
- 在主题:字段中输入
computers/Java
。 (参见图15。 )图15.创建新的MQTopicConnectionFactory
- 单击确定 。
- 请按照步骤9到13来创建其他主题,如表1所示。 完成后,退出JMSAdminGUI。
表1.其他主题
对象名称: | 话题: |
---|---|
的Linux | 电脑/ Linux |
所有计算机 | 电脑/* |
赛博朋克 | 书籍/数码朋克 |
诗歌 | 书/诗歌 |
全书 | 图书/* |
AllTopics | * |
运行示例程序
现在,您可以运行示例程序来测试发布/订阅。 您将需要像使用点对点程序一样为每个程序设置VM参数和类路径。
- 在MQPubSub项目中右键单击ChatUI,然后选择Run> Run 。
- 在“ 配置:”列表中选择“ Java应用程序 ”。
- 点击新建 。
- 单击参数选项卡。
- 在“ VM参数:”文本区域中,键入以下参数,每个参数之间用空格分隔。
-
-Djava.naming.factory.initial=com.ibm.mq.jms.context.WMQInitialContextFactory
-
-Djava.naming.provider.url=Ender
-
-Dsun.boot.library.path=C:\RAD\eclipse\jre\bin;C:\WSMQ\Java\lib
-
- 单击类路径选项卡。
- 单击“ Classpath:”列表中的“ Bootstrap项 ”。
- 单击添加外部JARS 。
- 导航到MQTools文件夹,然后选择以下JAR文件:
- com.ibm.mq.pcf.jar
- mqcontext.jar
- 点击打开 。
- 再次单击添加外部JARS 。
- 导航到C:\ WSMQ \ Java \ lib并选择以下JAR文件:
- com.ibm.mq.jar
- com.ibm.mqjms.jar
- 连接器.jar
- dhbcore.jar
- jms.jar
- 点击打开 。
- 点击运行 。
- 在“聊天”窗口的“ 用户名:”字段中键入
User1
,然后按Enter或单击“ 设置” 。 - 在Connection:字段中输入
EnderTCF
,然后按Enter或单击Set 。 - 在主题:字段中输入
Java
,然后按Enter或单击设置 。 - 将显示消息“用户1已进入聊天室”。
- 在Application Developer中,从主菜单中选择Run> Run History> ChatUI 。
- 在第二个“聊天”窗口中,在“ 用户名:”字段中键入
User2
,然后按Enter或单击“ 设置” 。 - 在Connection:字段中输入
EnderTCF
,然后按Enter或单击Set 。 - 在主题:字段中输入
Java
,然后按Enter或单击设置 。 - 您将在两个聊天窗口中看到消息“用户2已进入聊天室”。
- 在任一窗口的消息:字段中,键入任何文本,然后按Enter或单击发送 。 消息文本显示在两个窗口中,并以发布消息的用户名作为前缀。
- 尝试将每个窗口中的主题更改为使用JMSAdminGUI创建的其他主题之一。 但是,请勿尝试使用AllComputers,AllBooks或AllTopics,因为不允许发布对通配符(*)主题进行通配,而只能进行订阅。
- 另外,请尝试使用其他用户名运行其他
ChatUI
实例。 - 在继续下一步之前,将其中一个“聊天”窗口上的主题更改为Java。
- 返回到应用程序开发人员。
- 从主菜单中,选择运行>运行 。
- 右键单击Configurations:列表中的ChatUI ,然后选择Duplicate 。
- 将ChatUI(1)重命名为
ChatMonitorUI
。 - 将Main class字段更改为
com.ibm.qbda.mq.pubsub.ChatMonitorUI
。 - 点击应用 。
- 点击运行 。
- 在聊天监视器窗口的“ 连接:”字段中键入
EnderTCF
,然后按Enter或单击“ 设置” 。 - 在主题:字段中输入
AllComputers
,然后按Enter或单击设置 。 - 切换到使用Java主题的聊天窗口,确保聊天监视器窗口可见并发送消息。
- 消息文本将显示在聊天监视器窗口中,该窗口之前是消息发布到的主题和发布消息的用户。
- 切换到使用Java主题的聊天窗口,然后在Topic:字段中键入
Linux
,然后按Enter或单击Set 。 - 从该聊天窗口发送消息。
- 消息文本将显示在聊天监视器窗口中。
- 在使用Linux主题的聊天窗口中,输入
Cyberpunk
并按Enter或单击Set 。 - 从该聊天窗口发送消息。
- 您不会在聊天监视器窗口中看到该消息。
- 在聊天监视器窗口中,输入
AllTopics
并按Enter或单击设置 。 - 切换到使用“计算机朋克”主题的聊天窗口,然后发送一条消息。
- 您将在聊天监视器窗口中看到该消息。
- 完成后,通过单击右上角的X关闭所有聊天和聊天监控窗口。
使用WebSphere Test Environment运行样本程序
现在,您可以使用Application Developer中包含的WebSphere测试环境提供的内置JMS提供程序来运行示例程序。
安装示例代码
与点对点程序一样,我将pub / sub程序重新打包为应用程序客户端,以便使用WebSphere测试环境运行。
- 在Application Developer中,从主菜单中选择File> Import 。
- 选择Project Interchange作为导入源,然后单击Next 。
- 在“ 从zip文件:”字段中,输入先前提取的EMQPubSub.zip文件的位置。
- 单击全选 ,然后单击完成 。
创建JMS管理的对象
- 切换到Application Developer中的J2EE透视图。
- 在“ 服务器”视图中,右键单击WebSphere Application Server v6.0,然后选择启动 。
- 等待服务器的状态更改为已启动。
- 右键单击服务器,然后选择“运行管理控制台” 。
- 出现控制台时,使用任何用户ID登录。
- 单击左侧导航栏中的资源 。
- 单击“ JMS提供程序” 。
- 单击默认消息 。
- 从“ 连接工厂”列表中单击JMS主题连接工厂 。
- 点击新建 。
- 在名称字段中输入
BeanTCF
。 - 在JNDI名称字段中输入
jms/BeanTCF
。 - 从总线名称下拉列表中选择BeanBus 。
- 单击确定 。
- 点击屏幕顶部的保存 。
- 点击保存 。
- 单击左侧导航栏中的默认消息 。
- 从“ 目标”列表中单击JMS主题 。
- 点击新建 。
- 在名称字段中输入
Java
。 - 在JNDI名称字段中输入
jms/Java
。 - 在主题名称字段中输入
computers/Java
。 - 从总线名称下拉列表中选择BeanBus 。
- 您的屏幕应如图16所示 。
图16.创建新的JMS主题
- 单击确定 。
- 按照步骤19到25创建其他主题,所有主题均使用BeanBus总线,如表2所示。
表2.其他主题
名称 | JNDI名称 | 主题名称 |
---|---|---|
的Linux | jms / Linux | 电脑/ Linux |
所有计算机 | jms / AllComputers | 电脑/* |
赛博朋克 | jms / Cyberpunk | 书籍/数码朋克 |
诗歌 | jms /诗歌 | 书/诗歌 |
全书 | jms / AllBooks | 图书/* |
- 创建所有主题后,请单击屏幕顶部的“ 保存 ”。
- 点击保存 。
- 退出管理控制台。
- 在“ 服务器”视图中右键单击WebSphere Application Server v6.0 ,然后选择重新启动>启动 。
运行示例程序
- 在Project Explorer视图中右键单击EChat ,然后选择Run> Run 。
- 在“ 配置:”列表中选择WebSphere v6.0 Application Client 。
- 右键单击并选择新建 。
- 在名称:字段中输入
EChat
。 - 单击“ 应用” ,然后单击“运行” 。
- 在聊天窗口的用户名:字段中输入
User1
,然后按Enter或单击设置 。 - 在Connection:字段中输入
jms/BeanTCF
,然后按Enter或单击Set 。 - 在主题:字段中输入
jms/Java
,然后按Enter或单击设置 。 - 将显示“用户1已进入聊天室”消息。
- 在Application Developer中,从主菜单中选择Run> Run History> EChat 。
- 在第二个聊天窗口中,在“ 用户名:”字段中键入
User2
,然后按Enter或单击“ 设置” 。 - 在Connection:字段中输入
jms/BeanTCF
,然后按Enter或单击Set 。 - 在主题:字段中输入
jms/Java
,然后按Enter或单击设置 。 - 您将在两个聊天窗口中看到消息“ User2已进入聊天室”。
- 在任一窗口的消息:字段中,键入任何文本,然后按Enter或单击发送 。 消息文本显示在两个窗口中,并以发布消息的用户名作为前缀。
- 尝试将每个窗口中的主题更改为使用JMSAdminGUI创建的其他主题之一。 但是,请勿尝试使用jms / AllComputers或jms / AllBooks,因为发布不允许通配(*)主题,只能订阅。
- 另外,请尝试使用其他用户名运行其他
EChat
实例。 - 在继续下一步之前,将其中一个聊天窗口中的主题更改为Java。
- 返回到应用程序开发人员。
- 从主菜单中,选择运行>运行 。
- 右键单击“ 配置:”列表中的EChat ,然后选择“ 重复” 。
- 将EChat(1)重命名为
EChatMonitor
。 - 将“ 应用程序客户端模块:”字段更改为
EChatMonitor
。 - 点击应用 。
- 点击运行 。
- 在聊天监控器窗口的Connection:字段中输入
jms/BeanTCF
,然后按Enter或单击Set 。 - 在主题:字段中输入
jms/AllComputers
,然后按Enter或单击设置 。 - 切换到使用jms / Java主题的聊天窗口,确保聊天监视器窗口可见并发送消息。
- 消息文本将显示在聊天监视器窗口中,该窗口之前是消息发布到的主题和发布消息的用户。
- 切换到使用jms / Java主题的聊天窗口,然后在主题:字段中输入
jms/Linux
。 接下来,按Enter或单击“ 设置” 。 - 从该聊天窗口发送消息。
- 消息文本将显示在聊天监视器窗口中。
- 在使用jms / Linux主题的聊天窗口中,键入
jms/Cyberpunk
,然后按Enter或单击Set 。 - 从该聊天窗口发送消息。
- 您不会在聊天监视器窗口中看到该消息。
- 完成后,通过单击右上角的X关闭所有聊天和聊天监控窗口。
- 关闭Application Developer之前,请停止服务器测试环境。
摘要
在本教程中,您选择了上一教程的开头,并探讨了JMS编程中的其他一些主题,包括WebSphere MQ客户端传输,WebSphere MQ远程排队和JMS发布/订阅编程。
在下一个教程中,您将研究如何使用WebSphere MQ作为WebSphere Application Server中的JMS提供程序。 您还将使用JMS 1.1中提供的统一域接口来探索JMS编程。
翻译自: https://www.ibm.com/developerworks/websphere/tutorials/i-mqrad2/i-mqrad2.html