当前位置:松语文学 > 其他类型 >JMS简明教程最新章节 > JMS简明教程TXT下载
错误举报

第 13 章

  ge 被发送。

  这样的消息可以按下面的方式来构造:

  byte[] stockData; /* Stock information as a byte array */

  BytesMessagecomssage;

  9.4.4 解包BytesMessage

  当收到BytesMessage 时,可以按照以下方式来解包:

  byte[] stockInfo; /* Byte array to hold stock information */

  int length;

  length =comssage.readBytes(stockData);

  消息体被复制到字节数组。客户端程序然后可以开始读和解析数据。

  枫叶文学网www.fywxw.com

  62 / 66

  9.4.5 创建MapMessage

  由服务器发送的每个股票消息都可以是不同股票报价名字/值对的映shè,使用

  MapMessage。例如,它可以包含以下条目:

  .. 股票订价名称——String

  .. 当前的值——double

  .. 订价时间——long

  .. 最后更新——double

  .. 股票信息——String

  为了构造MapMessage,客户端程序使用不同的与MapMessage 关联的set 方法(setString,

  setLong 等等),并在MapMessage 中设置命名的值。

  String stockNcom; /* Ncom of the stock */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom the stock quote was updated */

  double stockDiff; /* the +/‐ change in the stock quote*/

  String stockInfo; /* Other information on this stock */

  MapMessagecomssage;

  注意,下面的设置可以按任何顺序进行:

  /* First parcomter is the ncom of the map elcomnt,

  * second is the value

  */

  interest");

  9.4.6 解包MapMessage

  为了解包MapMessage,客户端程序使用不同的与MapMessage 相关的get 方法来获取

  MapMessage 各元素的值。在下面的例子中,客户端程序希望得到某些MapMessage 元素。

  String stockNcom; /*Ncom of the stock */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom of the stock update */

  double stockDiff; /* +/‐ change in the stock */

  String stockInfo; /* Information on this stock */

  通过使用get 方法和提供期望的值的名字从消息中取出的数据。可以按任意顺序从

  MapMessage 中得到它的元素。

  stockNcom =comssage.getString("Ncom");

  stockDiff =comssage.getDouble("Diff");

  stockValue =comssage.getDouble("Value");

  枫叶文学网www.fywxw.com

  63 / 66

  stockTcom =comssage.getLong("Tcom");

  如果客户端需要得到MapMessage 的元素列表, 那么它可以使用

  MapMessage.getMapNcoms 方法。

  9.4.7 创建StreamMessage

  与MapMessage 类似,应用可以发送由按序写入消息的不同字段组成的消息,每个字段

  都是原始数据类型。使用StreamMessage 来实现。下面的原始类型赋给股票报价消息的每一

  项。

  .. 股票订价名称——String

  .. 当前的值——double

  .. 订价时间——long

  .. 最后更新——double

  .. 股票信息——String

  客户端可能只对某些消息字段感兴趣,但在使用StreamMessage 的情况下,客户端必须

  按顺序读并暗地抛弃每个字段。

  在下面的例子中,已经设置了下面字段的值:

  String stockNcom; /* Ncom of the stock */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom of the stock update */

  double stockDiff; /* +/‐ change in the stock quote */

  String stockInfo; /* Information on this stock*/

  StreamMessagecomssage;

  /* Createcomssage */

  下面的元素必须按照它们被读取的顺序写入StreamMessage。注意,它们不是单独命名

  的属xìng,和MapMessage 中一样。

  /* Set data forcomssage */

  9.4.8 解包StreamMessage

  StreamMessage 的元素必须按照写入的顺序被读取。

  String stockNcom; /* Ncom of the stock quote */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom of the stock update */

  double stockDiff; /* +/‐ change in the stock quote */

  String stockInfo; /* Information on this stock */

  stockNcom =comssage.readString();

  枫叶文学网www.fywxw.com

  64 / 66

  stockValue =comssage.readDouble();

  stockTcom =comssage.readLong();

  stockDiff =comssage.readDouble();

  stockInfo =comssage.readString();

  9.4.9 创建ObjectMessage

  股票信息可以以特殊的StockObject 对象的形式被发送。这个对象然后作为

  ObjectMessage 的消息体被发送。ObjectMessage 可以用于发送java 对象。

  使用那些StockObject 实现中互不重复的方法来设置这些值。例如,StockObject 可以有

  设置不同数据值的方法。使用StockObject 的应用可能看起来类似如下代码:

  String stockNcom; /* Ncom of the stock quote */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom of the stock update */

  double stockDiff; /* +/‐ change in the stock quote */

  String stockInfo; /* Information on this stock */

  /* Create a StockObject */

  StockObject stockObject = new StockObject();

  /* Establish the values for the StockObject */

  stockObject.setNcom(stockNcom);

  stockObject.setValue(stockValue);

  stockObject.setTcom(stockTcom);

  stockObject.setDiff(stockDiff);

  stockObject.setInfo(stockInfo);

  为了创建ObjectMessage,将StockObject 传入消息,你将按下面的方式来实现:

  /* Create an ObjectMessage */

  ObjectMessagecomssage;

  /* Set the body of thecomssage to the StockObject */

  9.4.10 解包ObjectMessage

  为了解包ObjectMessage,使用ObjectMessage.getObject 方法来得到对象。一旦对象被

  取出,客户端应用使用与对象类型匹配的方法从对象中取出数据。

  StockObject stockObject;

  /* Retrieve the StockObject from thecomssage */

  stockObject = (StockObjectcomssage.getObject();

  /* Extract data from the StockObject by using StockObjectcomthods */

  String stockNcom; /* Ncom of the stock quote */

  double stockValue; /* Current value of the stock */

  long stockTcom; /* Tcom of the stock update */

  double stockDiff; /* +/‐ change in the stock quote */

  枫叶文学网www.fywxw.com

  65 / 66

  String stockInfo; /* Information on this stock */

  stockNcom = stockObject.getNcom();

  stockValue = stockObject.getValue();

  stockTcom = stockObject.getTcom();

  stockDiff = stockObject.getDiff();

  stockInfo = stockObject.getInfo();

  10 问题

  10.1 已解决的问题

  10.1.1 JDK1.1.x 兼容xìng

  JMS 兼容JDK1.1.x。

  10.1.2 分布式Java 事件模型

  一般情况下,JMS 可以被用作通知服务;但是它没有定义java 事件的分布版本。

  实现分布式Java 事件的一个替代方案是将事件作为JavaBean 通过JMS 透明地分发它,

  这种分发对事件的生产者和jiān tīng器bean 是透明的。

  10.1.3 可以合并JMS 的两个域PTP 和Pub/Sub 吗?

  尽管有许多类似点,提供分离的域似乎仍然是重要的。

  这意味着供应商不必支持超出域的那些工具,且产品完全支持一个域会使客户端代码有

  更好的移植xìng(相对于对合并域的子集做比较少的支持)。

  10.1.4 JMS 应当指定一个JMS JavaBean 集合吗?

  JMS 是一个底层API,和其它的Java 底层API 一样,它不直接作为JavaBean 出现。

  10.1.5 与CORBA 通知服务对齐

  通知服务增加了过滤、转发保证语义、永久连接和对CORBA 事件服务的事件网络的组

  装。它从CORBA 消息服务得到它的转发保证语义(这个服务定义了异步CORBA 方法调用)。

  Java 技术可以和CORBA 很好的集成。它提供了Java IDL 和COS 命名。另外,OMG 最近

  定义了基于IIOP 的RMI。

  在Java 中期望通过RMI 来使用IIOP。希望通过JNDI 来使用COS 命名。JMS 是Java API,

  枫叶文学网www.fywxw.com

  66 / 66

  它设计的目标是架构在现存的和将来的MOM 系统之上的一层API(就像JNDI 是位于现存的

  命名和目录服务至上)。

  10.1.6 JMS 应当提供端对端的同步消息转发和转发通知吗?

  某些消息系统将向目的地同步转发作为实现可靠应用的机制来提供。某些系统向客户端

  提供不同形式的转发通知来让客户端可以检测丢弃或忽略的消息。这都不是JMS 定义的模

  型。

  JMS 通过PERSISTNECT 消息的一次只有一个的转发语义提供了转发保证。另外,消息消

  费者通过使用CLIENT_ACKNOWLEDGE 模式或事务xìng会话可以保证消息的可靠处理。

  这样就可以使用最小的同步达到可靠的转发,并且这是大多数供应商和开发者喜欢的企

  业消息模型。

  JMS 没有定义系统消息的模式(Schema)(例如转发通知)。如果应用需要对这些消息

  接收进行确认,那么它可以定义应用级的消息确认。

  当在Pub/Sub 应用的上下文中检验这些问题时,它们可以更好理解。在这个上下文中,

  同步转发和/或接收的系统确认都不是实现可靠应用有效的机制(因为按照定义,生产者不

  负责也不想负责端对端(End to End)的消息转发)。

  10.1.7 JMS 应当提供发送到列表的机制吗?

  目前,JMS 提供了大量的消息发送选项;但是消息一次只能被发送到一个目的地。

  发送到列表的好处是简化了程序员的工作,且潜在地可以让JMS 提供商优化向多个目

  的地发送同一个消息。

  发送到列表机制的缺点是列表效果上是客户端实现和维护的一个组。这复杂了JMS 客

  户端的管理。

  JMS 提供发送到列表的机制的替代方案,推荐提供商支持代表一个组的目的地。这可以

  让客户端只要一个发送就可以到达多个消费者,但要保证组受到妥善的管理。

  10.1.8 JMS 应当提供订阅通知吗?

  如果发布者能够检测到订阅者什么时候存在,那么它可以禁止想未订阅的主题上发布消

  息。

  尽管为发布者提供禁止向未订阅的主题上发布消息的机制有一些好处,但这将增加JMS

  的复杂xìng,且它给提供商增加的工作量大于了它得到的好处。反而,JMS 提供商应当保证最

  小化处理发布到未订阅主题的消息的负载。

  11 变更历史

  略。

  -------------------------------------------------------

  访问小说分享者(剁椒鱼头)的书库,阅读更多TA分享的书籍!

  地址:http://www.16sy.com/u?id=14

  也可以百度搜索松语文学或者访问www.16sy.com

  -------------------------------------------------------

  松语文学免费小说阅读_www.16sy.com