rabbitmq的队列并不是分布在集群中,而且每个节点维护自己的
假设A B组成一个集群,rabbit域名或elb指向A,那么client会连接到A。但如果目标queue在B上,rabbit就会有一个内部的“转发机”的机制来维护,相当于代理一样。通过该机制,client仍能正常操作queue
但有一个问题就是,该机制可能会引发内存升高。譬如,B的内存只有100M,A可能会达到1.5G,而此时A上的消息并未有堆积,也不繁忙
rabbitmq主要内存开销是内部database。上述问题的表现,就是binarys这个内存项目非常大
所以如果你的mq出现内存偏高,在确定无mq和erlang版本问题后,不妨从这个角度考虑一下:
将所有流量打到其队列所在的那个实例,不要跨机