1. 现象
为了避免单点故障,系统整体采用主备方式来实现。ActiveMQ作为重要的消息总线,自然也需要采取双机热备的方式。但是在系统实际运行过程中,出现了一个奇怪的现象:模块A连接的MQ服务器在两台机器之间来回跳动,而模块B不会同步跳动。由于模块A、B之间通过MQ进行通信,当两个模块连接的MQ服务器不同时,模块A、B之间将无法正常通信。
2. 问题原因
经过对比两个模块连接MQ的配置和网上查找资料,发现导致以上现象的原因。
出现跳动的模块A连接MQ的配置:
topic.brokerURL=failover:(nio://172.16.56.5:61618,nio://172.16.56.6:61618)?jms.prefetchPolicy.all=6000&maxReconnectAttempts=-1&startupMaxReconnectAttempts=10
不会跳动的模块B连接MQ的配置:
mq.topic.brokerURL=failover:(nio://172.16.56.5:61618,nio://172.16.56.6:61618)?jms.prefetchPolicy.all=6000&randomize=false&maxReconnectAttempts=-1&startupMaxReconnectAttempts=10
对比以上配置信息,可发现模块A比模块B缺少了一个参数random