ActiveMQ集群的安装与实践

近期项目做了工作流模块的拆分,考虑到降减轻主项目服务器的压力,将拆分后的
模块做成异步架构,现做了两套方案,一边是SOA服务用hessian一边是消息队列ActiveMQ。
最终项目敲定用的hessian,现将ActiveMQ准备的东西做个笔记,留之备用

ctiveMQ的持久化方式
ActiveMQ有三种持久化方式(在activemq.xml可配):
(1) 基于共享文件系统(KahaDB,默认)

<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

(2) 基于JDBC

<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#MySQL-DS"/>
</persistenceAdapter>
<!--注意:需要添加mysql-connector-java相关的jar包到avtivemq的lib包下-->
<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://127.0.0.1:3306/beautyssm_mq?useUnicode=true&amp;characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="xxxx"/>
</bean>

(3) 基于可复制的LevelDB(常用于集群)

<persistenceAdapter>
  <replicatedLevelDB
    directory="${activemq.data}/leveldb" 
    replicas="3" 
    bind="tcp://0.0.0.0:62621" 
  zkAddress="localhost:2181,localhost:2182,localhost:2183"
    hostname="localhost"
    zkPath="/activemq/leveldb-stores"/>#在zookeeper中集群相关数据存放路径
</persistenceAdapter>

LevelDB是Google开发的一套用于持久化数据的高性能类库。LevelDB并不是一种服务,用户需要自行实现Server。是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。
这里我们采用第三种方式,也是官网推荐的方式。

官网自行下载jar包,我用的是apache-activemq-5.11.1-bin.tar.gz,作集群我就备了一台服务器,因此做三个文件夹分清服务器,将之分别解压到三个文件夹中。

这里写图片描述

这个是解压后的文件目录

这里写图片描述

首先可以先行修改mq的管控台的端口,这样启动后可以通过控制台查看消费的和产生的信息

这里写图片描述

进入conf下,修改jetty.xml的 jettyPort, 将端口分别改为8161,8162,8163

<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
         <!-- the default port number for the web console -->
    <property name="host" value="0.0.0.0"/>
    <property name="port" value="8161"/>
</bean>

然后修改activemq.xml,这个是mq的主要配置了,先找到broker ,修改brokerName,集群的brokerName要全部一致。

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="local" dataDirectory="${activemq.data}">

在broker 里面添加

    <persistenceAdapter>
            <!-- kahaDB directory="${activemq.data}/kahadb"/ -->
            <replicatedLevelDB
                    directory="${activemq.data}/leveldb"
                    replicas="3"
                    bind="tcp://0.0.0.0:63631"
                    zkAddress="20.4.16.9:2181,20.4.16.10:2181,20.4.16.35:2181"
                    hostname="20.4.16.35"
                    zkPath="${activemq.data}/leveldb-stores"
            />
    </persistenceAdapter>

directory : 存储数据的路径
replicas : 集群中的节点数
bind : 用于各个节点之间的通讯
zkAddress : ZooKeeper的ip和port
zkPassword : 当连接到ZooKeeper服务器时用的密码
hostname : 本机ip

sync : 在认为消息被消费完成前, 同步信息所存贮的策略, 如果有多种策略用逗号隔开, ActiveMQ会选择较强的策略(local_mem, local_disk则肯定选择存贮在本地硬盘)

zkPath : ZooKeeper选举信息交换的存贮路径

然后修改各节点的消息端口分别是53531,53532,53533

这里写图片描述

然后/home/ljp/note-01/apache-activemq-5.11.1/bin/activemq sttart 分别启动三个集群

这里写图片描述

就算启动成功了 ,关于java 生产消息,消费的代码后续会贴出。

猜你喜欢

转载自blog.csdn.net/xuxie13/article/details/79195662