ActiveMQ 高级特性

Wildcards

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

ActiveMQ支持以下三种wildcards:
1:“.” 用于作为路径上名字间的分隔符
2:“*” 用于匹配路径上的任何名字
3:">" 用于递归地匹配任何以这个名字开始的destination
示例,设想你有如下两个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的产品的股票价格变动
客户化路径分隔符,比如你想要用 “/” 来替换 “.”
<plugins>
<destinationPathSeparatorPlugin/>

</plugins>

Destination高级特性之Composite Destinations

组合队列 Composite Destinations
组合队列允许用一个虚拟的destination代表多个destinations。这样就可以通过composite destinations在一个操作中同时向多个queue发送消息。
1:客户端实现的方式
在composite destinations中,多个destination之间采用“,”分割。例如:
Queue queue = new ActiveMQQueue("FOO.A,FOO.B,FOO.C");//(FOO.A,FOO.B,FOO.C都是队里的名称)
如果你希望使用不同类型的destination,那么需要加上前缀如queue:// 或topic://,例如:
Queue queue = new ActiveMQQueue("FOO.A,topic://NOTIFY.FOO.A");//既可以是消息队列,也可以是topic订阅
2:在xml配置实现的方式
<destinationInterceptors>
    <virtualDestinationInterceptor>
        <virtualDestinations>
            <compositeQueue name="MY.QUEUE"> //虚拟队列名称
                <forwardTo>
                    <queue physicalName="my-queue" />//物理队列名称
                    <queue physicalName="my-queue2" />//物理队列名称
                </forwardTo>
            </compositeQueue>
        </virtualDestinations>
    </virtualDestinationInterceptor>

</destinationInterceptors>

3:使用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>
4:避免在network连接broker中,出现重复消息
<networkConnectors>
    <networkConnector uri="static://(tcp://localhost:61617)">
        <excludedDestinations>
            <queue physicalName="Consumer.*.VirtualTopic.>"/>
        </excludedDestinations>
    </networkConnector>

</networkConnectors>

Configure Startup Destinations
如果需要在ActiveMQ启动的时候,创建Destination的话,可以如下配置:
<broker xmlns="http://activemq.apache.org/schema/core">
    <destinations>
        <queue physicalName="FOO.BAR" /> <!-- 在启动ActiveMQ时创建名称为FOO.BAR的队列 -->

        <topic physicalName="SOME.TOPIC" /><!-- 再启动ActiveMQ时创建名称为SOME.TOPIC -->

    </destinations>

</broker>

Delete Inactive Destinations

一般情况下,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:设置多长时间检查一次,这里是10秒,默认为0
inactiveTimoutBeforeGC:设置当Destination为空后,多长时间被删除,这里是30秒,默认为60

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

Destination Options
队列选项是给consumer在JMS规范之外添加的功能特性,通过在队列名称后面使用类似URL的语法添加多个选项。包括:
1:consumer.prefetchSize,consumer持有的未确认最大消息数量,默认值 variable
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 = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false&consumer.prefetchSize=10");co
nsumer = session.createConsumer(queue);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值