置步骤,查找ConnectionFactory 和Destination,创建Connection 和Session,如节9。1 “准备
发送和接收消息”中所述。
import javax。naming。*;
import javax。jms。*;
/* Look up connection factory */
ConnectionFactory connectionFactory;
Context messaging = new InitialContext();
connectionFactory =
(ConnectionFactory) Messaging。lookup(〃ConnectionFactory〃)
/* Look up destination */
Topic newsFeedTopic;
newsFeedTopic = messaging。lookup(〃BreakingNews〃);
/* Create connection and session */
Connection connection;
Session session;
connection = ConnectionFactory。createConnection();
session = connection。createSession(false; Session。AUTO_ACKNOWLEDGE);
执行完常规的设置后,客户端程序可以创建到目的地的永久订阅者。使用
session。createDurableSubscriber 来创建永久TopicSubscriber 。名字“mySubscription”用于标
识永久订阅。
session。createDurableSubscriber(newsFeedTopic;〃mySubscription〃);
此时,客户端程序可以启动连接和开始接收消息。
9。3。3。2 重新连接使用永久订阅的Topic
为了重新连接一个存在永久订阅的 Topic ,客户端程序可以简单的再次调用
session。createDurableSubscriber,参数和以前的相同。客户端程序可以中断连接。使用永久
订阅可以让从Topic 消费消息的客户端程序始终能够得到消息,即使客户端程序不是持续连
接的。
/* Reconnect to a durable subscription */
session。createDurableSubscriber(newsFeedTopic; 〃mySubscription〃);
这将会重新建立客户端程序到Topic 的连接,并且转发客户端断开时到达的消息。但是
需要知道几个重要的限制:
z 客户端必须使用同一个Connection 。
z Destination 和订阅的名字必须和以前的一样。
z 如果指定了消息选择器,则它的名字也必须和以前的一样。
如果不能满足这些条件,那么永久订阅被删除,并创建一个新的订阅。
60 / 66
…………………………………………………………Page 61……………………………………………………………
9。4 JMS 消息类型
有五个 JMS 消息类型。本节提供了如何创建和解包每种消息类型的例子。在每个例子
中,在消息中的数据都是与股票报价相关的数据。任何情况下,创建消息真正内容的代码都
是可以忽略的。
9。4。1 创建TextMessage
在这个例子中,股票报价信息作为 TextMessgae 被发送。TextMessage 携带了可以被客
户端作为文本字符串读取的消息。
下面的代码解释了如何创建这样的消息:
String stockData; /* Stock information as a string */
TextMessage message;
message = session。createTextMessage();
/* Set the stockData string to the message body */
message。setText(stockData);
9。4。2 解包TextMessage
为了解包TextMessage ,客户端使用Message。getText 方法。
String stockInfo; /* String to hold stock info */
stockInfo = message。getText();
9。4。3 创建BytesMessage
股票报价信息可以以字节格式发送,服务器知道如何构造它,客户端知道如何作为股票
报价来解析和展现它。它作为BytesMessage 被发送。
这样的消息可以按下面的方式来构造:
byte'' stockData; /* Stock information as a byte array */
BytesMessage message;
message = session。createBytesMessage();
message。writeBytes(stockData);
9。4。4 解包BytesMessage
当收到BytesMessage 时,可以按照以下方式来解包:
byte'' stockInfo; /* Byte array to hold stock information */
int length;
length = message。readBytes(stockData);
消息体被复制到字节数组。客户端程序然后可以开始读和解析数据。
61 / 66
…………………………………………………………Page 62……………………………………………………………
9。4。5 创建MapMessage
由服务器发送的每个股票消息都可以是不同股票报价名字/ 值对的映射,使用
MapMessage。例如,它可以包含以下条目:
z 股票订价名称——String
z 当前的值——double
z 订价时间——long
z 最后更新——double
z 股票信息——String
为了构造MapMessage,客户端程序使用不同的与MapMessage 关联的set 方法(setString,
setLong 等等),并在MapMessage 中设置命名的值。
String stockName; /* Name of the stock */
double stockValue; /* Current value of the stock */
long stockTime; /* Time the stock quote was updated */
double stockDiff; /* the +/hange in the stock quote*/
String stockInfo; /* Other information on this stock */
MapMessage message;
message = session。createMapMessage();
注意,下面的设置可以按任何顺序进行:
/* First parameter is the name of the map element;
* second is the value
*/
message。setString(〃Name〃; 〃SUNW〃);
message。setDouble(〃Value〃; stockValue);
message。setLong(〃Time〃; stockTime);
message。setDouble(〃Diff〃; stockDiff);
message。setString(〃Info〃; 〃Recent server announcement causes market
interest〃);
9。4。6 解包MapMessage
为了解包MapMessage,客户端程序使用不同的与MapMessage 相关的get 方法来获取
MapMessage 各元素的值。在下面的例子中,客户端程序希望得到某些MapMessage 元素。
String stockName; /*Name of the stock */
double stockValue; /* Current value of the stock */
long stockTime; /* Time of the stock update */
double stockDiff; /* +/hange in the stock */
String stockInfo; /* Information on this stock */
通过使用 get 方法和提供期望的值的名字从消息中取出的数据。可以按任意顺序从
MapMessage 中得到它的元素。
stockName = message。getString(〃Name〃);
stockDiff = message。getDouble(〃Diff〃);
stockValue = message。getDouble(〃Value〃);
62 /
小说推荐
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- JSP入门教程(DOC格式)
- -Page 1-jsp 入门教程0.0.1版权(c 2008 叮咚老菜鸟叮咚对文档的任何问题或建议,请给叮咚发邮件或留言。QQ:475784337QQ 群:51239192MSN:lingirl6@hotmail.EMAIL:lingirl6@hotmail.2008-02-28 20:05:061
- 最新章:第37章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章