1.Active Groups
Active Groups是一种动态的协作框架机制,他可以简化group内部成员间消息发送和状态共享的操作。Active Groups是基于对等协作——如同他的底层传输平台JMS一样。在ActiveMQ6.0以上支持,MQ6目前还在试验阶段。Active Groups包括以下:
1.动态增减的成员信息Dynamic membership information
2.广播消息broadcast messaging
3.点对点point-to-point
4.in boxes
5.分布式状态(Distributed state (Map))
6.状态监听(Map change listeners)
7.写锁write locks
8.锁期限lock expiration
9.成员下线时状态变更以及锁清除optional state and lock removal when a member leaves
10.动态状态变化、锁复制、故障转移automatic state and lock replication and failover
11.可配置的心跳监控configurable heartbeats
2.ActiveMQ Real Time
ActiveMQ Real Time作为AMQ的子项目,有明确的设计目的:为了满足实时应用组件间低延时的通讯要求。
ActiveMQ Real Time可用于多语言、多平添。他的主要3个目标是:
1.递延时的可拔插可靠的广播服务,并提供不同级别的服务质量。组通讯的复杂性意味着需要实现不同的广播协议去满足各组件实时协作所要求的需求Low latency pluggable reliable multicast - with different qualities of service. The complexities of group communication means that different reliable multicast protocols must be used to meet the needs of real-time application collaboration. 。ActiveBlaze 支持如下协议:
a.NACK-based reliable protocols
b.Totem protocol
c.Forward Error correction
2.满足成员之间真正的点对点通讯及组消息通讯。
a.Dynamic membership information
b.broadcast messaging
c.point-to-point
d.in boxes
e.configurable heartbeats
3.能满足状态共享、容错、可靠性、可用性要求的集群管理。
a.Distributed state (Map)
b.Map change listeners
c.write locks
d.lock expiration
e.optional state and lock removal when a member leaves
f.automatic state and lock replication and failover
对低延时的需求已经超过了JMS API可适用的范围,ActiveBlaze重新定义了新的API以满足高吞吐量的需求。为了支持多语言多格式和高效率的传输,ActiveBlaze底层是基于 Google's protobuf——一款用于高效编码各类自定义格式的框架。
2.1Broadcasting
ActiveBlaze提供了用于高速可靠传输点对点传输的基础组件,他可以满足高性能和应用协作组件的要求。通过使用成为“Channel”的基础块,提供基于不同问题解决的多层次结构,每一个层次都是上一层次的超集。BlazeChannel支持基于主题的广播,无论是使用群播或者点对点的方式。2.2Group Membership
ActiveBlaze支持组成员使用GroupChannel,通过GroupChannelFactory即可创建。每一GroupChannel都有一个全局性的唯一的名字和ID,使用者需要明确的指出要加入或离开的去组名,允许同时加入多个组。2.3生命周期
Blaze Channels包括5个生命周期阶段:a.Constructed:构造期,CHannel尚未被初始化或关闭
b.initialized:通过init()方法调用
c.started:start()方法,会隐式的调用init()
d.stopped:stop()方法,将停止通讯,可适用start重启
e.shut down:shutdown()关闭channel,并析构channel。
2.4消息结构体
消息的结构体被设计成BlazeMessage 对象,BlazeMessage 是一个键值对的map,键类型必须是String,值类型允许是byte、bytes[]、char、short、int、long、float、double、Map (supports recursion)。
3.Broker Camel Component
5.9+可用。将Apache Camel集成至ActiveMQ的borker provides中,可以极大的增强消息代理的灵活性。Camel也可以使你避免远程连接activemq数据串行化和网络传输所带来的开销。
若不通过Camel,你需要改变消息消息拦截器BrokerInterceptors或自己编写Broker plugin并将他们已jar的形式引入到环境变量中,才能改变消息发送的行为。然后通过Camel则更加简单,你只需要配置camel.xml,在消息持久化或发布到消费端之前,代理组件将会按照要求修改消息。比如现在要在所有发向某个主题的消息转发到某条队列上,并改变优先级,可以再camel.xml中增加配置
<route id="setPriority">
<from uri="broker:topic:test.broker.>"/>
<setHeader headerName="JMSPriority">
<constant>9</constant>
</setHeader>
<to uri="broker:queue:test.broker.component.queue"/>
</route>
1.运行代理组件开销微乎其微。
2.消息将在持久化或发送到目的地之前被拦截处理
3.可以使用通配符
4.可以重定向消息。
5.只能将已经被拦截的消息(组装成了 Camel Message)传递给dialing组件,如果从其他组件(如文件中)将消息路由至代理组件将会引发错误。There is one deliberate caveat though, you can only send messages to a broker component that have been intercepted - i.e. routing a Camel message from another Component (e.g. File) would result in an error.
现在已经有了更多实用的类添加至activemq-broker包,通过他们可以方便的查看broker的运行情况而不需要通过JMX的方式。
MessageBrokerView类可以提供接受broker统计信息的方法,基于该类还能获得BrokerDestinationView,后者拥有详细的目的端数据。这意味着你可以添加灵活的路由策略。比如,当目的地队列的深度限制策略。
<camelContext id="camel" trace="false" xmlns="http://camel.apache.org/schema/spring">
<route id="routeAboveQueueLimitTest">
<from uri="broker:queue:test.broker.queue"/>
<choice>
<when>
<spel>#{@destinationView.queueSize >= 100}</spel>
<to uri="broker:queue:test.broker.processLater"/>
</when>
<otherwise>
<to uri="broker:queue:test.broker.queue"/>
</otherwise>
</choice>
</route>
</camelContext>
<bean id="brokerView" class="org.apache.activemq.broker.view.MessageBrokerView">
<constructor-arg value="testBroker"/>
</bean>
<bean id="destinationView" factory-bean="brokerView" factory-method="getDestinationView">
<constructor-arg value="test.broker.component.route"/>
</bean>
总结
这篇中说的群组、实时传输、代理组件等特性,这几个特性不是非常的常用,或者说不是核心组件,所以以附加包的形式提供。