Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1504243
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 21:29:27

一起学习
在JMS1.1规范中规定了5种JMS消息类型,这篇文章给出如何创建和解包每种消息类型的片段代码。 1.创建一个TextMessage 这个例子里,股票报价信息被发送成一个TextMessage类型的消息,消息中搭载了一个可以被客户端读取的字符串数 据,下面的代码示范了如何去创建一个这样的消息:


String stockData; /* 股票信息是一个字符串 */

TextMessage message;

message = session.createTextMessage();

/* 设置股票信息到消息体 */

message.setText(stockData);

2.解包一个TextMessage 去解包一个TextMessage类型的消息,客户端可以使用Message.getText方法:


String stockInfo; 

stockInfo = message.getText();

3.创建一个BytesMessage 股票信息可能是一个服务器端知道如何去构建、客户端知道如何去解释的二进制格式的股票报价,象这样的消息可以 这样被构造:


byte[] stockData; /* 股票信息是一个字节数组 */

BytesMessage message;

message = session.createBytesMessage();

message.writeBytes(stockData);

4.解包一个BytesMessage 当接收到一个ByteMessage时,可以使用下面的方式来解包:


byte[] stockInfo; 

int length;

length = message.readBytes(stockData);

消息体被拷贝到字节数组,客户端程序可以读取这个树组来解释数据。 5.创建一个MapMessage 每种股票信息可能会包括多种(name/value)成对出现的map,可以使用MapMessage,例如它包括下面的信息: • 股票名 - a String • 当前值 - a double • 时间 - a long • 最后更改 - a double • 股票信息 - a String 去构造这个MapMessage,客户端可以使用MapMessage的各种set方法(setString, setLong, and so forth)去关联相关 信息。


String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */

MapMessage message;

message = session.createMapMessage();



...其他代码



message.setString("Name", "CN-JAVA");

message.setDouble("Value", stockValue);

message.setLong("Time", stockTime);

message.setDouble("Diff", stockDiff);

message.setString("Info", "Recent server announcement causes market

interest");

6.解包一个MapMessage 去解包一个MapMessage,客户端程序可以使用MapMessage的各种get方法来得到MapMessage元素名对应的值,下面给出 了这一个示例:


String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */



stockName = message.getString("Name");

stockDiff = message.getDouble("Diff");

stockValue = message.getDouble("Value");

stockTime = message.getLong("Time");

如果你想得到整个元素的列表,可以使用MapMessage.getMapNames方法来获得。 7.创建一个StreamMessage 和MapMessage相似,一个应用程序可以按序列发送多个字段到一个消息中,这些字段都是原始类型的,要做这些,你 可以使用一个StreamMessage,在这里可以将java原始类型分配给股票报价信息的每一个条目中: • 股票名 - a String • 当前值 - a double • 时间 - a long • 最后更改 - a double • 股票信息 - a String


String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */

StreamMessage message;



message = session.createStreamMessage();

下面的元素将被按顺序写到StreamMessage,注意他们没有象在MapMessage中的命名


message.writeString(stockName);

message.writeDouble(stockValue);

message.writeLong(stockTime);

message.writeDouble(stockDiff);

message.writeString(stockInfo);

8.解包一个StreamMessage StreamMessage中的元素必须按照被写入的顺序读出:


String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */



stockName = message.readString();

stockValue = message.readDouble();

stockTime = message.readLong();

stockDiff = message.readDouble();

stockInfo = message.readString();

9.创建一个ObjectMessage 被发送出的股票的信息可能来源于一个指定的StockObject Java对象,这个对象可以在一个ObjectMessage里作为消息 体被发出。ObjectMessage被用来发送Java对象。 这些值的设置方法由StockObject执行。例如,StockObject可以有一些设置各种数据值的方法,一个使用StockObject 的应用看起来象这样:


String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */



StockObject stockObject = new StockObject();

stockObject.setName(stockName);

stockObject.setValue(stockValue);

stockObject.setTime(stockTime);

stockObject.setDiff(stockDiff);

stockObject.setInfo(stockInfo);



ObjectMessage message;

message = session.createObjectMessage();

message.setObject(stockObject);

10.解包ObjectMessage 去解包ObjectMessage,使用ObjectMessage.getObject得到对象,一但对象被取出来,客户端程序使用Java造型语句将 对象还原成原始对象。


StockObject stockObject;



stockObject = (StockObject)message.getObject();



String stockName; /* 股票名 */

double stockValue; /* 当前值 */

long stockTime; /* 时间 */

double stockDiff; /* 最后更改*/

String stockInfo; /* 股票信息 */



stockName = stockObject.getName();

stockValue = stockObject.getValue();

stockTime = stockObject.getTime();

stockDiff = stockObject.getDiff();

stockInfo = stockObject.getInfo();

下载本文示例代码


JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型JMS消息类型
阅读(112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~