概述
一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性、吞吐量和消息堆积能力等问题的考虑,在生产环境上一般都会考虑使用RabbitMQ的集群方案。
![71f9b77d5705a37faee5b1039bc31432.png](https://img-blog.csdnimg.cn/img_convert/71f9b77d5705a37faee5b1039bc31432.png)
01
RabbitMQ集群方案的原理
RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的erlang.cookie来实现)。因此,RabbitMQ天然支持集群。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的。
下图为集群的示例:
![16ab7b3f92cb34cae6011a90326d7ccc.png](https://img-blog.csdnimg.cn/img_convert/16ab7b3f92cb34cae6011a90326d7ccc.png)
上面图中采用三个节点组成了一个RabbitMQ的集群,Exchange A(交换器)的元数据信息在所有节点上是一致的,而Queue(存放消息的队列)的完整数据则只会存在于它所创建的那个节点上。,其他节点只知道这个queue的metadata信息和一个指向queue的owner node的指针。