#消息丢失
1.服务端丢失
消息持久化机制
2.客户端丢失
1)生产端丢失
failover:
队列已满时,生产者会一直阻塞:https://blog.csdn.net/soulmate_p/article/details/81380937
2)消费端丢失
消息确认机制:忘记确认将引起内存泄漏
消息重新投递机制RedeliveryPolicy
#消息重复
幂等性
#消息顺序
1.将顺序敏感的消息分配到一个队列,只设置一个消费者。
2.业务控制。
#利用Zookeeper实现ActiveMQ的高可用
Master/Slave broker的信息注册到ZK。
只有Master对外提供了服务,Slave是待机状态。
当Master出现故障,ZK内部的选举机制,会让一个Slave升级成Master对外提供服务。
1.配置Zookeeper的高可用
2.配置ActiveMQ的高可用(主从)
1)主从机器对外统一名称brokerName="localhost"
2)持久化配置
<persistenceAdapter>
<!-- kahaDB -->
<kahaDB directory="${activemq.data}/kahadb"/>
<!-- replicatedLevelDB -->
<replicatedLevelDB directory="${activemq.data}/leveldb"
replicas="3" //ActiveMQ集群节点数量,replicas="3"时,如果一个节点不可用还可用,如果两个节点不可用则不可用
bind="tcp://0.0.0.0:62616" //bind地址是ActiveMQ集群内部通信的TCP端口
hostname="192.168.99.121" //本机主机名称
zkAddress="192.168.99.121:2181,192.168.99.122:2181,192.168.99.123:2181" //zk集群列表
zkPath="/activemq/mymq-leveldb-stores"/> //zkPath下存放着ActiveMQ的节点
</persistenceAdapter>
3)Java端访问ActiveMQ的地址配置
<property name="brokerURL" value="failover:(tcp://192.168.99.121:61616,tcp://192.168.99.122:61616,tcp://192.168.99.123:61616)?Randomize=false" />
#ActiveMQ的高可用的集群