• 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);
  • 相关阅读:
    关键路径的计算
    JSF简单介绍
    介绍:一款Mathematica的替代开源软件Mathetics
    素材链接
    JSP动作--JSP有三种凝视方式
    【InversionCount 逆序对数 + MergeSort】
    全响应跨设备的Zoomla!逐浪CMS2 x2.0正式公布
    DirectSound的应用
    “海归”首选北上广 薪资期望不太高-有感
    Servlet登陆功能的实现
  • 原文地址:https://www.cnblogs.com/Eternally-dream/p/9895545.html
Copyright © 2020-2023  润新知