Destination高级特性一
这一篇章我们主要说一下Destination的一些高级特性,主要内容有通配符和组合队列。下一篇我们还会讲解Destination的一些重要的特性。
一.高级特性之Wildcards(通配符)
Wildcards用来支持名字分层体系,是ActiveMQ的扩展。
ActiveMQ支持以下三种wildcards:
1.“.”用于作为路径上名字间的分隔符。
2.“*”用于匹配路径上的任何名字。
3.“>”用于递归地匹配任何以这个名字开始的destination
二.高级特性之Composite Destination-1(组合队列)
组合队列允许用一个虚拟的destination代表多个destination。这样就可以通过composite destination 在一个操作中同时向多个queue发送消息。
- 在客户端实现的方式
在composite destination 中,多个destination之间采用“,”分割。
Queue queue = new ActiveMQQueue(“que1, que2” );
如果你希望使用不同类型的destination,那么需要加上前缀如queue://或topic://
Queue queue = new ActiveMQQueue(“que1, topic://topic1”);
- 在xml配置实现的方式
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name=”MY.QUEUE”>
<forwardTo>
<queue physicaName=”que1”/>
<queue physicaName=”que2”/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
- 使用filetered destinations,在xml配置实现的方式
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name=”MY.QUEUE”>
<forwardTo>
<fileteredDestination selector=”odd = ‘yes’” queue=”que1”/>
<fileteredDestination selector=”i = 5” topic=”queue2”/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
- 避免在network连接broker中,出现重复消息
<networkConnectors>
<networkConnector url=”static://(tcp://localhost:61617)”>
<excludedDestinations>
<queue physicalName=”Consumer.*.VirtualTopic.”/>
</excludedDestinations>
</networkConnector>
</networkConnectors>
三.Destination高级特性之Configure Strartup Destinations
如果需要在ActiveMQ启动的时候,创建Destination的话,可以有如下配置
<broker xmlns=”http://activemq.apache.org/schema/core”>
<destinations>
<queue physicalName=”FOO.BAR”/>
<topic physicalName=”SOME.TOPIC”/>
</destinations>
</broker>
四.Destination高级特性之Delete Inactive Destinations
一般情况下,ActiveMQ的queue在不使用之后,可以通过web控制台或是JMX方式来删掉。当然,也可以通过配置,使得broker可以自动探测到无用的队列(一定时间内为空的队列)并删掉,回收响应资源。可以如下配置:
<broker xmlns=”http://activemq.apache.org/schema/core”
schedulePeriodForDestinationPurge>
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=”>” gcInactiveDestinations=”true” inactiveTimoutBeforeGC=”3000”/>
</policyEntries>
</policyMap>
</destinationPolicy>
</broker>
说明:
SchedulePerioForDestinationPurge:设置多长时间检查一次,这里是10秒,默认是为0。
InactiveTimoutBeforeGC:设置当Destination为空后,多长时间被删除,这里是30秒,默认为60。
gcInactiveDestinations: 设置删除掉不活动队列,默认为false。
五.Destination高级特性之Destination Options
队列选项是给consumer在JMS规范之外添加的功能特性,通过在队列名称后面使用类似URL的语法添加多个选项。 在这里,其实是设置consumer的属性的,后面我们再详细讲,在这里用处不大。