友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JMS简明教程(PDF格式)-第26章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




置步骤,查找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 / 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!