• 分布式-信息方式-ActiveMQ的Destination高级特性2


    使用filtered destinations,在xml配置如下:

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

    避免在network连接到broker,出现重复消息:

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

    在ActiveMQ启动时候就创建Destination:

    <broker xmlns="http://activemq.apache.org/schema/core">
           <destinations>
                  <queue physicalName="FOO.BAR" />
                  <queue physicalName="SOME.TOPIC" />
           </destinations>
    </broker>

    删除无用的队列

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

    一种方式:可以通过web控制台或是JMX方式来删除掉

    二种方式:通过配置文件,自动探测无用的队列并删除掉,回收响应资源,配置如下:

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="1000">
           <destinationPolicy>
                  <policyMap>
                    <policyEntries>
                         <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimeoutBeforeGC="5000" />
                    </policyEntries>
                  </policyMap>
           </destinationPolicy>
    </broker>

    SchedulePeriodForDestinationPurge:设置多长时间检查一次。

    inactiveTimeoutBeforeGC:设置当destination为空后,多长时间被删除,这里是30s,默认为60

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

    Destination 选项

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

    1       consumer.perfetchSize,消费者持有的未确认的最大消费数量

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

    3      consumer.noLocal: 默认false

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

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

    6     consumer.selector: JMS的selector,默认null

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

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

    使用示例:

    Queue queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=
    false&consumer.perfetchSize=10");
    Consumer consumer = session.createConsumer(queue);
  • 相关阅读:
    前端CSS部分简单整理
    前端HTML部分简单整理
    Top Android App使用的组件
    使用DialogFragment创建对话框总结
    Rails常用命令
    developer.android.com笔记
    Google Maps API v2 Demo Tutorial
    Android学习的一些问题
    Android学习过程
    Beginning Android 4 Programming Book学习
  • 原文地址:https://www.cnblogs.com/caoyingjielxq/p/9378316.html
Copyright © 2020-2023  润新知