参见9。3。1 “异步接收消息”了解如何异步消费消息。
MessageConsumer 用于从目的地接收消息,在这个例子中是“StockQueue ”。用
Session。createConsumer 方法来创建MessageConsumer,参数是接收消息的目的地。
MessageConsumer receiver;
/* Value in stockQueue previously looked up in the JNDI
* createConsumer takes a Destination
*/
receiver = session。createConsumer(stockQueue);
9。1。7 启动消息转发
到现在为止,消息的转发还是被禁止的,以便前面的设置不会被异步转发的消息打断。
现在设置已经完成,可以告诉Connection 开始向MessageConsumer 转发消息了。
connection。start();
9。1。8 使用TextMessage
有几个消息格式。在这个例子中,股票报价消息作为文本串被发送。客户端按文本串读
取和展示这个消息。
下面的代码解释了如何创建这样的消息:
String stockData; /* Stock information as a string */
TextMessage message;
/* Set the message’s text to be the stockData string */
message = session。createTextMessage();
message。setText(stockData);
9。2 发送和接收消息
现在已经完成了Session 的设置,你可以发送和接收消息了。本节描述了如何:
z 创建消息
z 发送消息
z 同步接收消息
9。2。1 发送消息
为了发送消息,使用MessageProducer。send 方法,参数是Message 对象。
/* Send the message */
sender。send(message);
57 / 66
…………………………………………………………Page 58……………………………………………………………
9。2。2 同步接收消息
为了接收Queue 里的消息,你可以使用MessageConsumer。receive 方法。这个方法调用
在消息到达Queue 之前可能阻塞。这个方法也可以用于从Topic 中接收消息。
TextMessage stockMessage;
stockMessage = (TextMessage)receiver。receive();
为了限制客户端阻塞的时间长度,使用 receive 方法的超时参数。如果在超时到期时还
没有消息到达,那么receive 方法返回。超时参数按毫秒计时。
TextMessage stockMessage;
/* Wait 4 seconds for a message */
TextMessage = (TextMessage)receiver。receive(4000);
9。2。3 解包TextMessage
股票报价信息使用 TextMessage 发送。为了从消息中得到这个信息,使用
TextMessage。getText 方法。它以字符串返回消息的内容。
String newStockData; /* Stock information as a string */
newStockData = message。getText();
9。3 其他消息特性
本节不仅提供了基本的消息功能,而且还描述了如何执行某些其他的公共消息功能:
z 创建异步MessageListener。
z 使用消息选择器过滤消息转发。
z 创建Topic 的永久订阅。
z 对使用永久订阅的Topic 进行重新连接。
9。3。1 异步接收消息
为了在消息被转发到消息消费者时异步的接收消息,客户端程序需要创建实现了
MessageListener 接口的消息监听器。本例中 MessageListener 接口的实现称为
StockListener。java,类似于下面的代码:
import javax。jms。*;
public class StockListener implements MessageListener
{
public void onMessage(Message message) {
/* Unpack and handle the messages received */
。。。
}
}
客户端程序按下面的方式将这个MessageListener 对象注册到MessageConsumer 对象:
58 / 66
…………………………………………………………Page 59……………………………………………………………
StockListener myListener = new StockListener();
/* Receiver is MessageConsumer object */
receiver。setMessageListener(myListener);
Connection 必须被启动以迎接开始的消息转发。当消息被发布到 Queue 时会异步的通
知MessageListener。这通过MessageListener 接口的onMessage 方法实现。由客户端负责处
理消息。
public void onMessage(Message message)
{
String newStockData;
/* Unpack and handle the messages received */
newStockData = message。getText();
if(。。。)
{
/* Logic related to the data */
}
}
9。3。2 使用消息选择器
在这个例子中,客户端程序只对技术相关的股票感兴趣。消息的发送者向消息的属性中
设置一个称为StockSector 的属性。它的值包括“Technology ”,“Financial”,“Manufacturing”;
“Emerging”和“Global ”。消息发送者通过使用Message。setStringProperty 方法来设置这些
属性值。
String stockData; /* Stock information as a String */
TextMessage message;
/* Set the message’s text to be the stockData string *
message = session。createTextMessage();
message。setText(stockData);
/* Set the message property ‘StockSector’
message。setStringProperty(〃StockSector〃; 〃Technology〃);
当接收股票报价消息客户端程序 MessageConsumer 被创建时,它可以创建一个消息选
择器字符串来决定它将接收哪些消息。
String selector;
selector = new String(〃(StockSector = ‘Technology’)〃
这个字符串在创建MessageConsumer 时指定。
MessageConsumer receiver;
receiver = session。createConsumer(stockQueue; selector);
客户端程序只接收和Technology 相关的消息。
9。3。3 使用永久订阅
永久订阅用于从Topic 接收消息。当JMS 客户端创建永久订阅时,客户端能够从Topic
断开连接。当客户端程序重新连接时,它可以收到断开连接后到达的消息。在这个例子中,
59 / 66
…………………………………………………………Page 60……………………………………………………………
Destination 提供对消息更新的通知。
9。3。3。1 创建永久订阅
下面的例子创建了从Topic 获取消息的永久订阅。首先,客户端程序必须执行常规的设
置步骤,查找ConnectionFactory 和Destination,创建Connection 和Session,如节9。1 “准备
发送和接收消息”中所述。
import
小说推荐
- 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章