一、现象描述
ActiveMQ 高可用配置后,实际是主从模式的切换,当 master 服务宕后,slave 服务会获取锁,其中有 10S 的
等待时间,得到锁后,slave 会变成 Master,当宕机的 Master 启动后,则变为了 slave。
在此期间,发布订阅的消息在切换过程中,线程一直监听的是 master,客户端会 Failover 到 Slave,在 10S 的
接收锁的过程中,线程会断掉,重启后,订阅的消息也会丢失。
二、问题处理
修改 ActiveMq 的核心 jar 包中的源码:
org.apache.activemq.transport.failover.FailoverTransport.FailoverTransport()方法;
在 133 行增加 reconnectTaskFactory.setDaemon(false); //非保护线程
三、结果
保证了线程不断开,并且 Failover 到 Slave 后,未接受的消息,仍旧可以继续处理。