ActiveMQ之brokers network集群

一、集群配置方式类型

master-slave

<networkConnectors>
  <networkConnector uri="masterslave:(tcp://host1:61616,tcp://host2:61616,tcp://..)"/>
</networkConnectors>
  • uri列表中对应的顺序就是MASTER,SLAVE1,SLAVE2...SLAVE;
  • master-slave的作用就是brokers之间的主从,同一时刻只能连接一个broker。通常先连接master,如果master连接不上,则连接slave;
  • brokers之间的消息同步机制是通过<persistenceAdapter>共享的存储方式来共享数据的,如:jdbc/kahaDB/replicaLevelDB(zookeeper)。同时,brokers之间也是通过获取数据存储的访问权来获取broker的主导权(即哪个broker激活)。
  • zookeeper做masterslave时,brokers的名字必须一致,否则zookeeper会认为不符合2n+1的规则。
  • masterslave这种配置既可以在activeMQ.xml中配置,也可以在client端使用。通常建议在client使用。虽然master-slave可以提高可用性,但是负载均衡的功能减弱,并且很多时候会浪费slave broker服务器。

broker static discover

<networkConnectors>
  <networkConnector uri="static:(tcp://host1:61616,tcp://host2:61617,tcp://..)"/>
</networkConnectors>

表示当前local broker与remote broker(61616/61617)建立的单向网络连接。即local broker可以将消息传递给remote broker,但反过来就不行。duplex="true" 属性配置可以开启双向通信。

broker multicast discover

<networkConnectors>
   <networkConnector uri="multicast://default"/>
</networkConnectors>

<transportConnector uri="tcp://localhost:0" discoveryUri="multicast://default"/>

组播发现会自动发现同网络中的broker并进行连接通信。注意:必须是同网络中。
在实际的配置很少这样配置,因为无法保证哪些brokers建立了连接。对于master-slave配置也不是很好。

dynamicallyIncludedDestinations

<dynamicallyIncludedDestinations>
     <queue physicalName="include.test.foo"/>
     <topic physicalName="include.test.bar"/>
</dynamicallyIncludedDestinations>

当networkConnector中连接的broker有customers时,那么对应的destinations才会传递到对应的broker。否则,不传递。这中方式对于point-to-point的方式就比较合适。

staticallyIncludedDestinations

<staticallyIncludedDestinations>
     <queue physicalName="always.include.queue"/>
     <topic physicalName="always.include.topic"/>
</staticallyIncludedDestinations>

不管networkConnector中连接的broker有无customers,都会讲消息发送到每个broker去。这种方式比较适合topic的消息方式。

excludedDestinations

<excludedDestinations>
     <queue physicalName="exclude.test.foo"/>
     <topic physicalName="exclude.test.bar"/>
</excludedDestinations>

networkConnector中指定某些detination不会发送到remote brokers.

networkConnector中uri的参数

uri="static:(tcp://host1:61616,tcp://host2:61616)?maxReconnectDelay=5000&useExponentialBackOff=false"

initialReconnectDelay:重连的时间间隔。
maxReconnectDelay:最大重连时间。即initialReconnectDelay次数
useExponentialBackOff:一次连接失败,后面的重连时间是否依次递增。
backOffMultiplier:当useExponentialBackOff=true,重连时间的间隔的倍数,即initialReconnectDelay
backOffMultiplier

networkConnector属性配置

name:连接名称,多个时必须唯一。
dynamicOnly:
decreaseNetworkConsumerPriority:
networkTTL:
messageTTL:
consumerTTL:
conduitSubscriptions:管道订阅。即一个broker有多个customers,也只会认为是一个customer.
excludedDestinations:
dynamicallyIncludedDestinations:
useVirtualDestSubs:
staticallyIncludedDestinations:
duplex:是否开启双工通信
prefetchSize:
suppressDuplicateQueueSubscriptions:
bridgeTempDestinations:
alwaysSyncSend:
staticBridge:静态连接桥。与staticallyIncludedDestinations联合使用
userName:networkConnector连接用户名
password:networkConnector连接密码

二、集群实例

broker-master

<networkConnectors>
    <networkConnector name="connector_master_slave" uri="static:(tcp://localhost:61618,tcp://localhost:61619)"
                           userName="admin" password="admin123"/>
   <networkConnector name="connector_brokers" uri="static:(tcp://localhost:61620,tcp://localhost:61621)"                         userName="admin" password="admin123">
     <dynamicallyIncludedDestinations>
          <queue physicalName=">"/>
     </dynamicallyIncludedDestinations>
     <staticallyIncludedDestinations>
           <topic physicalName=">"/>
     </staticallyIncludedDestinations>
   </networkConnector>
</networkConnectors>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

broker-slave01

<networkConnectors>
    <networkConnector name="connector_master_slave" uri="static:(tcp://localhost:61617,tcp://localhost:61619)"              userName="admin" password="admin123"/>
    <networkConnector name="connector_brokers" uri="static:(tcp://localhost:61620,tcp://localhost:61621)"                            userName="admin" password="admin123">
       <dynamicallyIncludedDestinations>
             <queue physicalName=">"/>
       </dynamicallyIncludedDestinations>
       <staticallyIncludedDestinations>
             <topic physicalName=">"/>
       </staticallyIncludedDestinations>
    </networkConnector>
</networkConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

broker-slave02

<networkConnectors>
   <networkConnector name="connector_master_slave"
                           uri="static:(tcp://localhost:61617,tcp://localhost:61618)" userName="admin" password="admin123"/>
   <networkConnector name="connector_brokers" uri="static:(tcp://localhost:61620,tcp://localhost:61621)"                          userName="admin" password="admin123">
          <dynamicallyIncludedDestinations>
                   <queue physicalName=">"/>
          </dynamicallyIncludedDestinations>
          <staticallyIncludedDestinations>
                   <topic physicalName=">"/>
          </staticallyIncludedDestinations>
     </networkConnector>
</networkConnectors>

broker-cluster01

<networkConnectors>
     <networkConnector uri="static:(tcp://localhost:61621)" duplex="false" name="connector_broker_normal"                            userName="admin" password="admin123">
         <dynamicallyIncludedDestinations>
                   <queue physicalName=">" />
                   <topic physicalName=">" />
         </dynamicallyIncludedDestinations>
     </networkConnector>
</networkConnectors>

<transportConnector name="openwire" uri="tcp://0.0.0.0:61620?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

broker-cluster02

<networkConnectors>
     <networkConnector uri="static:(tcp://localhost:61620)" duplex="false" name="connector_broker_normal"                           userName="admin" password="admin123">
         <dynamicallyIncludedDestinations>
                 <queue physicalName=">" />
                 <topic physicalName=">" />
         </dynamicallyIncludedDestinations>
     </networkConnector>
</networkConnectors>

<transportConnector name="openwire"uri="tcp://0.0.0.0:61621?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>

brokers的安全配置

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
         <value>file:${activemq.conf}/credentials.properties</value>
    </property>
</bean>

<plugins>
   <simpleAuthenticationPlugin>
       <users>
         <authenticationUser username="${activemq.username}" password="${activemq.password}"  groups="admins"/>
        </users>
   </simpleAuthenticationPlugin> 

        <authorizationPlugin>
          <map>
           <authorizationMap>
            <authorizationEntries>
             <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
             <authorizationEntry topic=">" read="admins" write="admins" admin="admins"/>
            </authorizationEntries>
            <tempDestinationAuthorizationEntry>
             <tempDestinationAuthorizationEntry read="admins" write="admins" admin="admins"/>
            </tempDestinationAuthorizationEntry>
           </authorizationMap>
          </map>
   </authorizationPlugin>
</plugins>

参考文档:
http://activemq.apache.org/networks-of-brokers.html
http://shift-alt-ctrl.iteye.com/blog/2070531
https://www.cnblogs.com/shihaiming/p/6018916.html

原文地址:http://blog.51cto.com/881206524/2129863

时间: 2024-11-13 19:07:26

ActiveMQ之brokers network集群的相关文章

[转]ActiveMQ的几种集群配置

ActiveMQ是一款功能强大的消息服务器,它支持许多种开发语言,例如Java, C, C++, C#等等.企业级消息服务器无论对服务器稳定性还是速度,要求都很高,而ActiveMQ的分布式集群则能很好的满足这一需求,下面说说ActiveMQ的几种集群配置. Queue consumer clusters 此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如下: Broker clusters 此种配置是一个消费者连接到多个bro

ActiveMQ的几种集群配置

ActiveMQ是一款功能强大的消息服务器,它支持许多种开发语言,例如Java, C, C++, C#等等.企业级消息服务器无论对服务器稳定性还是速度,要求都很高,而ActiveMQ的分布式集群则能很好的满足这一需求,下面说说ActiveMQ的几种集群配置. Queue consumer clusters 此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如下: Broker clusters 此种配置是一个消费者连接到多个bro

activemq+Zookeper高可用集群方案配置

在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper + LevelDB 的 Master-Slave 实现方式. 相关文章:范例项目: http://wosyingjun.iteye.com/blog/2312553 ActiveMQ的简单实用:http://wosyingjun.iteye.com/blog/2314

基于Docker搭建ActiveMQ的高可用集群

最近刚开始玩Docker和ActiveMQ刚好学习到ActiveMQ集群的搭建,就将其记录了下来给有需要的人,也可以跟大家交流交流. 这里先感谢慕课网和http://blog.csdn.net/lifetragedy/article/details/51869032,在学习ActiveMQ有很大的帮助. 一.docker坏境的搭建. 这里重点不是docker,而是基于docker搭建的ActiveMQ集群,docker了解的也可以参考http://www.docker.org.cn/.     

ActiveMQ(七)_伪集群和主从高可用使用

一.本文目的 介绍如何在同一台虚拟机上搭建高可用的Activemq服务,集群数量包含3个Activemq,当Activemq可用数>=2时,整个集群可用. 本文Activemq的集群数量为3个,分别命名为mq1,mq2,mq3   二.概念介绍 1.伪集群 集群搭建在同一台虚拟机上,3个Activemq分别使用不同的端口提供服务,启用1个为Master,其它2个为Slaver,同一时间仅Master队列提供服务 2.高可用 3个Activemq服务,同一时间仅Master队列提供服务,当Mast

ActiveMQ学习第五篇:ActiveMq伪集群学习

启动多实例 # 1.将conf文件夹复制一份 cp -r conf/ conf-1/ #主要是修改conf-1目录activemq.xml # 2.修改Broker名称 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost-1" dataDirectory="${activemq.data}"> #3.数据存储如果使用的是kahaDB,

架构设计:系统间通信(25)——ActiveMQ集群方案(上)

1.综述 通过之前的文章,我们讨论了ActiveMQ的基本使用,包括单个ActiveMQ服务节点的性能特征,关键调整参数:我们还介绍了单个ActiveMQ节点上三种不同的持久化存储方案,并讨论了这三种不同的持久化存储方案的配置和性能特点.但是这还远远不够,因为在生产环境中为了保证让我们设计的消息服务方案能够持续工作,我们还需要为消息中间件服务搭建集群环境,从而在保证消息中间件服务可靠性和处理性能. 2.ActiveMQ多节点方案 集群方案主要为了解决系统架构中的两个关键问题:高可用和高性能.Ac

架构设计:系统间通信(26)——ActiveMQ集群方案(下)

(接上文<架构设计:系统间通信(26)--ActiveMQ集群方案(上)>) 3.ActiveMQ热备方案 ActiveMQ热备方案,主要保证ActiveMQ的高可用性.这种方案并不像上节中我们主要讨论的ActiveMQ高性能方案那样,同时有多个节点都处于工作状态,也就是说这种方案并不提高ActiveMQ集群的性能:而是从集群中的多个节点选择一个,让其处于工作状态,集群中其它节点则处于待命状态.当主要的工作节点由于各种异常情况停止服务时,保证处于待命的节点能够无缝接替其工作. 3-1.Acti

ActiveMQ 高可用集群安装、配置(ZooKeeper + LevelDB)

1.ActiveMQ 集群部署规划: 环境: JDK7 版本:ActiveMQ 5.11.1 ZooKeeper 集群环境:10.14.0.1:2181,10.14.0.2:2182,10.14.0.3:2183(ZooKeeper 集群部署请参考<ZooKeeper 集群的安装.配置>) 主机 集群端口 消息端口 管控台端口 节点安装目录 192.168.1.11 63631 53531 8361 /opt/aijia/activemq/node-01 192.168.1.12 63632