在使用ActiveMQ Artemis构建高可用消息队列系统时,集群配置是一个常见但复杂的主题。本文将探讨一个实际案例,揭示在ActiveMQ Artemis集群中消费者连接和消息重分配(redistribution)可能出现的问题,并提供解决方案。
问题描述
假设我们有一个由四台独立的ActiveMQ Artemis节点(artemis1, artemis2, artemis3, artemis4)组成的对称集群,每台节点的配置相同,包括队列设置等。客户端应用通过如下连接字符串连接到集群:
(tcp://artemis1:61616,tcp://artemis2:61616,tcp://artemis3:61616,tcp://artemis4:61616)?type=XA_CF&ha=true&retryInterval=1000&retryIntervalMultiplier=2&maxRetryInterval=32000&reconnectAttempts=-1
通常,消费者连接是持久的,可能保持连接数小时。在某些情况下,比如消费者应用程序进行维护或暂时关闭,可能会导致所有节点上某一特定队列没有消费者。此时,如果生产者继续向队列发送消息,这些消息会随机分布