第三章 ActiveMQ集群方式
3.1 AMQ集群特点
? 异构系统通讯、异步调用、应用解耦。
? 高可用性。每组Broker采用主从模式部署,支持Failover。 ? 客户端支持多组Broker服务器负载均衡和Failover。 ? 统一的异常消息重试服务,偏于容错。 ? 同步发送、消息持久化,防止数据丢失。 ? 消息异步归档到云存储,偏于问题跟踪。
? 高扩展性。动态扩容,支持水平扩展,按消息垂直划分。
? 易维护。统一集群管理控制平台,完善的监控报警,消息运营状况统计。 ? 原理图:
3.2 AMQ集群方式--Queue consumer clusters
ActiveMQ支持订阅同一个queue的consumers上的集群。如果一个consumer失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。如果某个consumer的处理速度比其它 consumers更快,那么这个consumer就会消费更多的消息。
第28页
3.3 AMQ集群方式--Broker clusters
一个常见的场景是有多个JMS broker,有一个客户连接到其中一个broker。如果这个broker失效,那么客户会自动重新连接到其它的broker。在ActiveMQ中使用failover:// 协议来实现这个功能。ActiveMQ3.x版本的reliable://协议已经变更为failover://。
如果某个网络上有多个brokers而且客户使用静态发现(使用Static Transport或Failover Transport)或动态发现(使用Discovery Transport),那么客户可以容易地在某个broker失效的情况下切换到其它的brokers。然而,stand alone brokers并不了解其它brokers上的consumers,也就是说如果某个broker上没有consumers,那么这个broker上的消息可能会因得不到处理而积压起来。目前的解决方案是使用Network of brokers,以便在broker之间存储转发消息。
从ActiveMQ1.1版本起,ActiveMQ支持networks of brokers。它支持分布式的queues和topics。一个broker会相同对待所有的订阅(subscription):不管他们是来自本地的客户连接,还是来自远程broker,它都会递送有关的消息拷贝到每个订阅。远程broker得到这个消息拷贝后,会依次把它递送到其内部的本地连接上。有两种方式配置Network of brokers, 一种是使用static transport,如下:
第29页
另外一种是使用multicast discovery,如下:
Network Connector有以下属性:
属性 name dynamicOnly 默认描述 值 bridg名称 e 如果为true, 持久订阅被激活时false 才创建对应的网路持久订阅。默认是启动时激活。 如果为true,网络的消费者优先false 级降低为-5。如果为false,则默认跟本地消费者一样为0. 消息和订阅在网络上通过的1 broker数量 多个网络消费者是否被当做一个true 消费者来对待。 第30页
decreaseNetworkConsumerPriority networkTTL conduitSubscriptions
excludedDestinations empty 不通过网络转发的destination 通过网络转发的destinations,dynamicallyIncludedDestinations empty 注意空列表代表所有的都转发。 匹配的都将通过网络转发-即使没staticallyIncludedDestinations empty 有对应的消费者 如果为true,则既可消费又可生duplex false 产消息到网络broker 设置网络消费者的prefetch sizeprefetchSize 1000 参数。必须大于0,因为网络消费者不能自己轮询消息。 suppressDuplicateQueueSubscriptio(从5.3版本开始) 如果为true, false ns 重复的订阅关系一产生即被阻止。 是否广播advisory messages来创bridgeTempDestinations true 建临时destination。 (从 5.6版本开始) 如果为true,非持久化消息也将使用alwaysSyncSend false request/reply方式代替oneway方式发送到远程broker。 (从5.6版本开始) 如果为true,只有staticBridge false staticallyIncludedDestinations中配置的destination可以被处理。 3.3.1 管道订阅conduitSubscriptions
对于conduitSubscriptions属性,用于负载均衡时使用。设想有两个brokers,分别是brokerA和brokerB,它们之间用 forwarding bridge连接。有一个consumer连接到brokerA并订阅queue:Q.TEST。有两个consumers连接到brokerB,也是订阅queue:Q.TEST。这三个consumers有相同的优先级。然后启动一个producer,它发送了30条消息到brokerA。如果 conduitSubscriptions=true,那么brokerA上的consumer会得到15条消息,另外15条消息会发送给brokerB。此时负载并不均衡,因为此时brokerA将brokerB上的两个consumers视为一个;如果 conduitSubscriptions=false,那么每个consumer上都会收到10条消息。
3.3.2 双向网络连接(duplex networkConnector)
默认NetworkConnector在需要转发消息时是单向连接的。当duplex=true时,就变成了双向连接,这时配置在broker2端的指向broker1的duplex networkConnector,相当于即配置了
第31页
broker2到broker1的网络连接,也配置了broker1到broker2的网络连接。(就是说不管broker1同意与否,都被绑架了。)当然,仅仅在broker1上配置也有同样的效果。
注意:可以在两个broker间建立两个以上的双向网络连接来增加吞吐量或对主题\\队列分区,只需要指定他们使用不同的name即可。
3.3.3 指定和限制Destination
通过NetworkConnector共享的destination太多,传输的Advisory Message就会变的非常多,系统的拓扑结构将变得非常复杂,所有才有多种方式来限制这些destination配置:
dynamicallyIncludedDestinations
这里匹配到的destination,在需要时将被转发。 excludedDestinations
这里匹配到的destination,将不会被转发 staticallyIncludedDestinations
如果指定了staticBridge为true,则只有这里匹配的destination可以被转发。此时本地broker完全被其他broker代理。 并且本broker不会订阅其他broker上的AdvisoryMessage,也不会获取任何远程consumer信息。 这几个配置可以使用通配符,比如“>”,详见wildcard。 示例代码:
conduitSubscriptions=\ decreaseNetworkConsumerPriority=\> 第32页 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ActiveMQ使用手册(7)在线全文阅读。
相关推荐: