activemq集群 master/slave主从模式 jdbc持久化存储配置总结
版本:5.14.5
三台activemq服务器
机器1 机器2 机器3
主要配置文件
conf/activemq.xml
1. brokerName 配置
将三台机器的brokerName分别设置为 localhost0
,localhost1
,localhost2
三个不同的名字
2. 开启jmx监控
useJmx="true"
3. 添加splitSystemUsageForProducersConsumers
添加splitSystemUsageForProducersConsumers="true"
,将生产者和消费者使用的内存分开,以防因为生产者过多导致消费阻塞
4. 编写数据源配置
在broker标签之外添加数据源,本次采用的是dbcp连接池
5.修改持久化方式
注释掉原来broker标签中的的持久化方式,新增jdbc持久化
createTablesOnStratup
指是否在节点启动时创建数据库,一般在启动第一个节点时设置为true,之后都改为false
useDatabaseLock
指是否使用数据库锁
lockKeepAlivePeriod
指节点定期检查自己是否是master节点的时间间隔
lockAcquireSleepInterval
指slave节点尝试成为master节点的时间间隔
6.修改使用的系统资源
sendFailIfNoSpaceAfterTimeout
表示如果因为消费者正忙而无法消费,则在3秒后再次发送
percentOfJvmHeap
表示占堆内存的百分比
storeUsage
表示持久化磁盘的最大容量(这里因为是持久化到数据库,所以并不使用)
tempUsage
表示因为消费者正忙而无法及时消费时,缓存到磁盘中的最大容量
7.设置activemq的内存
在activemq的bin目录下的activemq中,修改ACTIVEMQ_OPTS
Xms表示最小堆内存,Xmx表示最大堆内存
后面一行表示信任的包名,作用是可以在8161的web端看到队列中的具体内容
6.启动activemq
- 将机器1的createTablesOnStartup属性设置为true,在activemq下的bin目录使用 ./activemq start启动机器1,
因为机器1是第一个启动的节点,所以机器1可以获取锁并成为master节点 - 将机器2的createTablesOnStartup属性设置为false,启动机器2,
因为机器1已经占据锁,所以机器2启动为slave,不能接收消息,当机器1down掉之后,机器2会获取锁成为master节点接收消息,
并继承机器1的所有消息 - 将机器3的createTablesOnStartup属性设置为false,启动机器3
- 将机器1的createTablesOnStartup属性设置为false
- 除了之外,activemq还有另外一种锁机制,
如果采用,当运行一段时间后,master节点down掉之后,slave会无法启动成为新的master节点。- jdbcPersistenceAdapter默认 useDatabaseLock="false",
如果使用默认配置,启动slave节点后,slave节点会取代master节点成为新的节点,而原来的master节点又会成为slave节点
经过lockAcquireSleepInterval毫秒后,新的slave节点又会取代master节点,导致master节点频繁变动。