近期项目做了工作流模块的拆分,考虑到降减轻主项目服务器的压力,将拆分后的
模块做成异步架构,现做了两套方案,一边是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&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 生产消息,消费的代码后续会贴出。