首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

ActiveMQ in Action(七)

2012-07-27 
ActiveMQ in Action(7)?2.6.7 Wildcards??? Wildcards用来支持联合的名字分层体系(federated name hierarc

ActiveMQ in Action(7)

?

2.6.7 Wildcards
??? Wildcards用来支持联合的名字分层体系(federated name hierarchies)。它不是JMS规范的一部分,而是ActiveMQ的扩展。ActiveMQ支持以下三种wildcards:

  • "." 用于作为路径上名字间的分隔符。
  • "*" 用于匹配路径上的任何名字。
  • ">" 用于递归地匹配任何以这个名字开始的destination。

    ?? 作为一种组织事件和订阅感兴趣那部分信息的一种方法,这个概念在金融市场领域已经流行了一段时间了。设想你有以下两个destination:

    • PRICE.STOCK.NASDAQ.IBM (IBM在NASDAQ的股价)
    • PRICE.STOCK.NYSE.SUNW (SUN在纽约证券交易所的股价)

      ?? 订阅者可以明确地指定destination的名字来订阅消息,或者它也可以使用wildcards来定义一个分层的模式来匹配它希望订阅的destination。例如:

      ?

      ?

      SubscriptionMeaningPRICE.>Any price for any product on any exchangePRICE.STOCK.>Any price for a stock on any exchangePRICE.STOCK.NASDAQ.*Any stock price on NASDAQPRICE.STOCK.*.IBMAny IBM stock price on any exchange

      2.6.8 Async Sends
      ??? ActiveMQ支持以同步(sync)方式或者异步(async)方式向broker发送消息。 使用何种方式对send方法的延迟有巨大的影响。对于生产者来说,既然延迟是决定吞吐量的重要因素,那么使用异步发送方式会极大地提高系统的性能。
      ??? ActiveMQ缺省使用异步传输方式。但是按照JMS规范,当在事务外发送持久化消息的时候,ActiveMQ会强制使用同步发送方式。在这种情况下,每一次发送都是同步的,而且阻塞到收到broker的应答。这个应答保证了broker已经成功地将消息持久化,而且不会丢失。但是这样作也严重地影响了性能。
      ??? 如果你的系统可以容忍少量的消息丢失,那么可以在事务外发送持久消息的时候,选择使用异步方式。以下是几种不同的配置方式:

      ?

      ?2.6.13 Message Transformation

      ?

      ??? 有时候需要在JMS provider内部进行message的转换。从4.2版本起,ActiveMQ 提供了一个MessageTransformer 接口用于进行消息转换,如下:

      ?

      public Message consumerTransform(Session session, MessageConsumer consumer, Message message) throws JMSException {       ObjectMessage om = (ObjectMessage)message;       XStream xstream = new XStream();       xstream.alias("simple message", SimpleMessage.class);       String xml = xstream.toXML(om.getObject());       return session.createTextMessage(xml);   }     public Message producerTransform(Session session, MessageProducer consumer, Message message) throws JMSException {       return null;   }   });  
      ?

      ?

热点排行