ActiveMQ学习笔记(13)----Destination高级特性(一) ActiveMQ学习笔记(13)----Destination高级特性(一)

1. Wildcards

  1. Wildcards用来支持名字分层体系,它不是JMS规范的一部分,是ActiveMQ的扩展。

    ActiveMQ支持一下三种wildcards:

    1. ".": 用于作为匹配路径上名字间的分隔符

    2. “*": 用于匹配路径上的任何名字(不递归)

    3. ”>“: 用于递归的匹配任何以这个名字开始的destination

  2. 示例:设想你有如下两个destinations

  PRICE.STOCK.NASDAQ.IBM(IBM在NASDAQ的股价)

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

  那么:

    1. PRICE.>:匹配任何产品的价格变动

    2. PRICE.STOCK.>:匹配任何产品的股票价格变动

    3. PRICE.STOCK.NASDAQ.*: 匹配 任何的在NASDAQ下面的产品的股票价格变动

    4. PRICE.STOCK.*.IBM:匹配任何的IBM的产品的股票价格变动

  3.客户化路径分隔符,比如你想要用”/“来替换”.“,配置如下

 <plugins>
      <destinationPathSeparatorPlugin/>     </plugins>

2. Composite Destinations

  1. 组合队列 Composite Destinations

    组合队列允许用一个虚拟的destination代表多个destinations。这样就可以通过composite destinations在一个操作中同时向多个queue发送消息。

  2. 客户端实现方式

    composite destinations中,多个destination之间采用”,“分割。例如:

    Queue queue = new ActiveMQQueue("FOO.A,FOO.B,FOO.C");

    如果你希望使用不同类型的destination,那么需要加上前缀如:queue://或topic://。例如:

    Queue queue = new ActiveMQQueue("FOO.A,topic://FOO.B,FOO.C");

  3. 在xml配置实现方式

 
<destinationInterceptor>
    <virtualDestinationInterceptor> <virtualDestinations> <compositeQueue name="MY.QUEUE"> <forwardTo> <queue physicalName="my-queue"/> <queue physicalName="my-queue2"/> </forwardTo> </compositeQueue > </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptor>
 

  4. 使用filtered destinations,在xml配置实现的方式

 
<destinationInterceptor>
    <virtualDestinationInterceptor> <virtualDestinations> <compositeQueue name="MY.QUEUE"> <forwardTo> <filteredDestination selector="odd = 'yes'" queue="FOO"/> <filteredDestination selector="i =5" queue="BAR"/> </forwardTo> </compositeQueue > </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptor>
 

  5. 避免在network连接broker中,出现重复消息配置如下:

 
<networkConnectors>

    <networkConnector uri="static://(tcp://localhost:61716)">       <excludedDestinations>         <queue physicalName="Consumer.*.VirtualTopic.>">       </excludedDestinations>     </networkConnector>   </networkConnectors>
 

3. Configure Startup Destination

  如果需要在ActiveMQ启动的时候,预先创建Destination的话,可以如下配置:  

 
 <broker xmlns="http://activemq.apache.org/schema/core">

      <destinations>         <queue physicalName="FOO.BAR"/>         <topic physicalName="SOME.TOPIC"/>       </destinations>     </broker>
 

4. Delete Inactive Destinations

  1. 概念:

    一般情况下,ActiveMQ的queue在不使用之后,可以通过web控制台或是JMX方式来删除掉。当然,也可以通过配置,使得broker可以自动探测到无用的队列(一定时间内为空的队列)并删除掉,回收响应资源,可以如下配置

 
 <broker xmlns="http://activemq.apache.org/schema/core"
      schedulePeriodForDestinationPurge="10000">       <destinationPolicy>         <policyMap>           <policyEntries>             <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000"/>           </policyEntries>         </policyMap>       </destinationPolicy>     </broker>
 

  schedulePeriodForDestinationPurge:设置多长时间检查一次,这里是10s,默认是0

  inactiveTimoutBeforeGC:设置当Destination为空后,多长时间被删除,这里是30s,默认是0

  gcInactiveDestinations: 设置删掉不活动的队列,默认为false.

4. Destination Options

  队列选项是给consumer在JMS之外添加的功能特性,通过在队列名称后面使用类似URL的语法添加多个选项。包括:

  consumer.prefetchSize,consumer持有的未确认最大消息数量,默认值variable

  consumer.maximumPendingMessageLimit: 用来控制非持久化的topic在存在慢消费者的情况下,丢弃的数量,默认0

  consumer.noLocal: 默认false

  consumer.dispatchAsync: 是否异步分发,默认true

  consumer.retroactive:是否为回溯消费者,默认false

  consumer.selector:jms的selector,默认null,

  consumer.exclusive:是否为独占消费者,默认false

  consumer.priority:设置消费者的优先级,默认0

  使用示例:

  

queue = new ActiveMQQueue("TEST.QUEUE2?consumer.dispatchAsync=false&consumer.prefetchSize=10");

  consumer = session.createConsumer(queue);

原文 ActiveMQ学习笔记(13)----Destination高级特性(一)

1. Wildcards

  1. Wildcards用来支持名字分层体系,它不是JMS规范的一部分,是ActiveMQ的扩展。

    ActiveMQ支持一下三种wildcards:

    1. ".": 用于作为匹配路径上名字间的分隔符

    2. “*": 用于匹配路径上的任何名字(不递归)

    3. ”>“: 用于递归的匹配任何以这个名字开始的destination

  2. 示例:设想你有如下两个destinations

  PRICE.STOCK.NASDAQ.IBM(IBM在NASDAQ的股价)

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

  那么:

    1. PRICE.>:匹配任何产品的价格变动

    2. PRICE.STOCK.>:匹配任何产品的股票价格变动

    3. PRICE.STOCK.NASDAQ.*: 匹配 任何的在NASDAQ下面的产品的股票价格变动

    4. PRICE.STOCK.*.IBM:匹配任何的IBM的产品的股票价格变动

  3.客户化路径分隔符,比如你想要用”/“来替换”.“,配置如下

 <plugins>
      <destinationPathSeparatorPlugin/>     </plugins>

2. Composite Destinations

  1. 组合队列 Composite Destinations

    组合队列允许用一个虚拟的destination代表多个destinations。这样就可以通过composite destinations在一个操作中同时向多个queue发送消息。

  2. 客户端实现方式

    composite destinations中,多个destination之间采用”,“分割。例如:

    Queue queue = new ActiveMQQueue("FOO.A,FOO.B,FOO.C");

    如果你希望使用不同类型的destination,那么需要加上前缀如:queue://或topic://。例如:

    Queue queue = new ActiveMQQueue("FOO.A,topic://FOO.B,FOO.C");

  3. 在xml配置实现方式

 
<destinationInterceptor>
    <virtualDestinationInterceptor> <virtualDestinations> <compositeQueue name="MY.QUEUE"> <forwardTo> <queue physicalName="my-queue"/> <queue physicalName="my-queue2"/> </forwardTo> </compositeQueue > </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptor>
 

  4. 使用filtered destinations,在xml配置实现的方式

 
<destinationInterceptor>
    <virtualDestinationInterceptor> <virtualDestinations> <compositeQueue name="MY.QUEUE"> <forwardTo> <filteredDestination selector="odd = 'yes'" queue="FOO"/> <filteredDestination selector="i =5" queue="BAR"/> </forwardTo> </compositeQueue > </virtualDestinations> </virtualDestinationInterceptor> </destinationInterceptor>
 

  5. 避免在network连接broker中,出现重复消息配置如下:

 
<networkConnectors>

    <networkConnector uri="static://(tcp://localhost:61716)">       <excludedDestinations>         <queue physicalName="Consumer.*.VirtualTopic.>">       </excludedDestinations>     </networkConnector>   </networkConnectors>
 

3. Configure Startup Destination

  如果需要在ActiveMQ启动的时候,预先创建Destination的话,可以如下配置:  

 
 <broker xmlns="http://activemq.apache.org/schema/core">

      <destinations>         <queue physicalName="FOO.BAR"/>         <topic physicalName="SOME.TOPIC"/>       </destinations>     </broker>
 

4. Delete Inactive Destinations

  1. 概念:

    一般情况下,ActiveMQ的queue在不使用之后,可以通过web控制台或是JMX方式来删除掉。当然,也可以通过配置,使得broker可以自动探测到无用的队列(一定时间内为空的队列)并删除掉,回收响应资源,可以如下配置

 
 <broker xmlns="http://activemq.apache.org/schema/core"
      schedulePeriodForDestinationPurge="10000">       <destinationPolicy>         <policyMap>           <policyEntries>             <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000"/>           </policyEntries>         </policyMap>       </destinationPolicy>     </broker>
 

  schedulePeriodForDestinationPurge:设置多长时间检查一次,这里是10s,默认是0

  inactiveTimoutBeforeGC:设置当Destination为空后,多长时间被删除,这里是30s,默认是0

  gcInactiveDestinations: 设置删掉不活动的队列,默认为false.

4. Destination Options

  队列选项是给consumer在JMS之外添加的功能特性,通过在队列名称后面使用类似URL的语法添加多个选项。包括:

  consumer.prefetchSize,consumer持有的未确认最大消息数量,默认值variable

  consumer.maximumPendingMessageLimit: 用来控制非持久化的topic在存在慢消费者的情况下,丢弃的数量,默认0

  consumer.noLocal: 默认false

  consumer.dispatchAsync: 是否异步分发,默认true

  consumer.retroactive:是否为回溯消费者,默认false

  consumer.selector:jms的selector,默认null,

  consumer.exclusive:是否为独占消费者,默认false

  consumer.priority:设置消费者的优先级,默认0

  使用示例:

  

queue = new ActiveMQQueue("TEST.QUEUE2?consumer.dispatchAsync=false&consumer.prefetchSize=10");

  consumer = session.createConsumer(queue);

猜你喜欢

转载自www.cnblogs.com/xiaoshen666/p/10854706.html