zoukankan      html  css  js  c++  java
  • Activemq集群搭建

    集群搭建

    一:静态网络集群

    1.简介

    ​ 当ActiveMQ面对大量消息存储和大量Client交互时,性能消耗将会达到单个broker极限,此时我们需要对ActiveMQ进行水平扩展。ActiveMQ提供了“network”机制,可以把多个broker实例“串联”一起,形成“Forward Bridge”模型(转发桥)。这些Broker通过有向网络(networker Connector)链接在一起,组成broker集群,任何一个Borker都可以与Client数据交互,消息也将在Broker网络中“流动”直到被消费,之所以“流动”,因为“producer”和“consumer”会与不同的broker建立链接,我们认为“转发桥”架构模式是“较大”集群数据的解决方案。

    2.拓扑图

    静态网络集群

    3.配置示例

    在activemq.xml配置文件中加入

    <beans
    	<networkConnectors>
       		<networkConnector   uri="static:(tcp://172.22.30.17:61616,tcp://172.22.30.18:61616)" duplex="true"/>
    	</networkConnectors>
    <eans
    
    • url 对端mq的连接地址,如果有多台,以","为分隔符
    • duplex true为双向订阅,两台mq之间互为消费者和生产者,如果为false,即配置主机为消费者,远端主机为生产者

    二:主从集群

    1.简介

    ​ 在master-slave模式中,消息将会在多个broker上备份,即集群中每个broker上消息都一样,在故障转移时不会发生消息丢失的问题(持久化消息)。

    2.拓扑图

    目前mq支持三种持久化方式,如下:

    • kahadb:以本地的数据库形式存储,速度没有AMQ快,扩展性好,目前mq默认的持久化方式。
    • AMQ:文件存储方式,写入速度快和容易恢复,默认文件大小为32M,5.3版本以前默认支持。
    • JDBC:使用外置数据库的形式存储消息。

    特性对比:

    • AMQ/kahadb:读写性能一般
    • jdbc:受限于数据库性能,也比较一般
    • zookeeper:性能比较好

    3.配置示例

    修改activemq.xml文件,更改kahadb持久化方式为mysql

    修改activemq.xml文件,更改kahadb持久化方式为mysql
            <persistenceAdapter>
                <jdbcPersistenceAdapter  dataDirectory="${activemq.base}/data" dataSource="#mysql-ds" useDatabaseLock="true"/>
                <!--
                <kahaDB directory="${activemq.data}/kahadb"/> 
                -->
            </persistenceAdapter>
    

    修改activemq,在后添加数据库连接信息

    <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://192.168.30.130:3306/activemq?relaxAutoCommit=true"/>
            <property name="username" value="root"/>
            <property name="password" value="p3temp_S"/>
            <property name="poolPreparedStatements" value="true"/>
    </bean>
    

    4.切换说明

    1. 当master启动后,会自动在activemq中创建三个表

      ACTIVEMQ_ACKS	为第三张表的外键连接
      ACTIVEMQ_LOCK	master锁定,保证只有一个master
      ACTIVEMQ_MSGS	存储消息
      
    2. 优先读取到db的ACTIVEMQ_LOCK的为master

    3. 处于slave状态的Broker,服务端口(61616)和manage(6181)端口是没有启动的。

    4. 处于slave状态的Broker,会定时去读取MySQL,如果发现已经被锁了,则继续等待

      2018-01-03 11:10:53,698 | INFO  | Failed to acquire lock.  Sleeping for 1000 milli(s) before trying again... | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
      2018-01-03 11:11:45,715 | INFO  | Failed to acquire lock.  Sleeping for 1000 milli(s) before trying again... | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
      2018-01-03 11:12:37,735 | INFO  | Failed to acquire lock.  Sleeping for 1000 milli(s) before trying again... | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
      2018-01-03 11:13:29,751 | INFO  | Failed to acquire lock.  Sleeping for 1000 milli(s) before trying again... | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
      

    三:客户端

    1.连接url说明

    failover:(tcp://local:61616,tcp://remote:61616)?randomize=false&priorityBackup=true
    
    • failover:连接地址池为多个,以","号为分隔符,当其中一个失效后,会自动切换
    • randomize:false关闭随机选择
    • priorityBackup:当randomize为false时,pri为true时,会默认为第一个为优先
    • timeout:超时时间
  • 相关阅读:
    详解go语言的array和slice 【一】
    node.js 事件循环
    搭建Docker私有仓库--自签名方式
    详解JavaScript闭包
    [个人翻译]Redis 集群教程(下)
    转:CMake 使用方法
    转: Ogre实现无缝地图要改的地方 记下来 用的时候可以看
    转:ogre的编译及安装
    转:Ogre TerrainGroup地形赏析
    转:如何编译delta3d
  • 原文地址:https://www.cnblogs.com/GXLo/p/8182973.html
Copyright © 2011-2022 走看看