024. ActiveMQ 高可用集群方案
< 返回列表时间: 2020-06-09来源:OSCHINA
1. ActiveMQ 高可用集群方案介绍
http://activemq.apache.org/clustering.html 基于jdbc 基于kahaDB http://activemq.apache.org/replicated-message-store.html http://activemq.apache.org/pure-master-slave.html http://activemq.apache.org/networks-of-brokers.html
2. Master-Slave 部署方式
1. Shared filesystem Master-Slave 部署方式

2. Shared database Master-Slave 部署方式
因 ActiveMQ 默认不支持数据库存储,需要手动添加数据库驱动。在 ${ACTIVEMQ_HOME}/lib/extra/ 下放入 mysql-connector-java-xxx.jar 驱动。 <broker> 节点,设置 persistent="true" ,开启持久化。 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" persistent="true" dataDirectory="${activemq.data}"> 设置数据库适配,指定 mysql 数据源。 <persistenceAdapter> <!-- <kahaDB directory="${activemq.data}/kahadb"/> --> <!-- 这里是关键 --> <jdbcPersistenceAdapter dataSource="#mysql-ds" useDatabaseLock="false" transactionIsolation="4"/> </persistenceAdapter> <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test_activemq?relaxAutoCommit=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> <property name="poolPreparedStatements" value="true"/> </bean> 想要多台,直接复制 activemq 目录到其他服务器即可。 代码连接 mq 地址配置。 // 非failover的公共参数配置通过nested.*,例如 failover:(...)?nested.wireFormat.maxInactivityDuration=1000 // randomize=false 随机选择,默认是顺序 // 指定优先切换 failover:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616)?priorityBackup=true&priorityURIs=tcp://local1:61616,tcp://local2:61616 // maxReconnectDelay重连的最大间隔时间(毫秒) String brokerUrl = "failover:(tcp://activemq.tony.com:61616,tcp://activemq-slave.tony.com:61616)?initialReconnectDelay=100";
3. Replicated LevelDB Store 方式(弃用)

3. Broker-Cluster 部署方式 官方地址: http://activemq.apache.org/networks-of-brokers.html
该方式有一个问题,假如某一个数据库宕机,数据将变得不可用。 通过网络连接,将多个 broker 组合,对外构成一个整体,集群间共享队列和主题列表。
Static Broker-Cluster 部署配置 在 ${ACTIVEMQ_HOME}/conf/activemq.xml 中静态指定 Broker 需要桥连接的其他 Broker。 在所有节点中添加 networkConnector 节点,uri 地址为集群内其他节点的信息。 <networkConnectors> <networkConnector uri="static:(tcp://other-broker:port)" duplex="false"/> </networkConnectors> 所有的 broker 都启动后,在 web 管理界面的 Network 页面可以看到连接信息。
Dynamic Broker-Cluster 部署配置 在 ${ACTIVEMQ_HOME}/conf/activemq.xml 中静态指定 Broker 需要桥连接的其他 Broker。由 activemq 启动后动态查找。(基于 multicast 技术,确保网络畅通) 首先在 Broker 节点中添加 networkConnector 节点。 <networkConnectors> <networkConnector uri="multicast://default"/> </networkConnectors> 修改 transportConnector,增加 discoveryUri 属性,并添加 publishedAddressPolicy。 <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600" discoveryUri="multicast://default"> <publishedAddressPolicy publishedHostStrategy="IPADDRESS"> </publishedAddressPolicy> </transportConnector>
4. Master-Slave 和 Broker—Cluster 相结合的部署方式

部署配置 修改 ${ACTIVEMQ_HOME}/conf/activemq.xml ,在 Broker 节点中添加多个 networkConnector,连接到多个 broker 集群。 <networkConnectors> <networkConnector uri="masterslave:(tcp://other-cluster-1-master:port,tcp://cluster-1-slave:port)" duplex="false"/> <networkConnector uri="masterslave:(tcp://other-cluster-2-master:port,tcp://cluster-2-slave:port)" duplex="false"/> ...... </networkConnectors>
5. networkConnector 网络连接器配置说明
1. networkConnector 配置属性说明
属性 默认值 描述 name bridge 名称
dynamicOnly false 如果为 true,持久订阅被激活时才创建对应的持久订阅。
decreaseNetworkConsumerPriority false 如果为 true,网络的消费者优先级降低为 -5。<br/>如果为 false,则默认跟本地消费者一样为 0。
networkTTL 1 消费和订阅在网络上通过的 broker 数量。
conduitSubscription true 多个网络消费者是否被当做一个消费者来对待。
excludedDestinations empty 不通过网络转发的 destination。
dynamicallyIncludedDestinations empty 通过网络转发的 destination,注意空列表代表所有的都转发。
staticallyIncludedDestinations empty 匹配的都将通过网络转发-即使没有对应的消费者。
duplex false 如果为 true,则既可以消费有课生产消息到网络的 broker。
prefetchSize 1000 设置网络消费者的 prefetch size 参数。<br/>必须大于 0,因为网络消费者不能自己轮询消息。
suppressDuplicateQueueSubscriptions false 如果为 true,重复的订阅关系一产生即被阻止。(注意:从 5.3 版本开始)
bridgeTempDestinations true 是否广播 advisoty messages 来创建临时的 destination。
alwaysSyncSend staticBridge
false false
如果为 true,非持久化消息也将使用 request/reply 方式替代 oneway 方式发送到远程 broker。(注意:从 5.6 版本开始) 如果为 true,只有 staticallyIncludedDestinations 中配置的 destination 可以被处理。(注意:从 5.6 版本开始)
热门排行