之前给大家介绍过rabbitmq集群模式,那么下面要给大家介绍的就是rabbitmq集群原理,你了解多少呢?下面就一起来看看吧。
1、rabbitmq集群方案原理
首先我们要清楚的知道,rabbitmq自身是基于Erlang来编写的。
Erlang语言天生就自带分布式特性,所以说,rabbitmq天生就支持集群。
集群可以保证可靠性,与此同时,还能够通过水平扩展来达到增加消息吞吐量能力的作用。
集群示例:
在上图当中,采取了三个节点组成一个rabbitmq集群。
queue的完整数据只会存放在它所创建的那个节点上面。
其他的节点只知道,这个queue的metadata信息和一个指向queue的owner node的指针。
Exchange A的元数据信息在所有的节点上面都是一致的。
2、rabbitmq集群元数据的同步
rabbitmq集群始终都会同步队列元数据、交换器元数据、绑定元数据、vhost元数据这4种类型的内部元数据。
所以,在用户访问其中的任何一个rabbitmq节点的时候,通过rabbitmqctl查询到的queue、user、exchange、vhost等信息都会是一样的。
rabbitmq集群仅仅只采用了元数据同步的方式主要是从性能、存储空间两方面来考虑的。
3、rabbitmq集群发送和订阅消息
以上是rabbitmq集群工作原理图
假如,有一个消息生产者又或者是一个消息消费者通过amqp-client客户端连接到节点1,进行消息或者是订阅消息,这样的话,这个时候集群当中的消息收发只和节点1有关系。
假如,消息生产者链接到节点2又或者是节点3,那么,这个时候,队列1的完整数据不在这两个节点上面。
这样的话,在发送消息的过程当中,这两个节点主要起了一个路由转发作用。
依据这两个节点上的元数据转发到节点1上面,最终,发送的消息还是会存储至节点1的队列1上面。
相同的,假如,连接的是节点2又或者是节点3,则,这两个节点也会作为路由节点,起到转发作用,将会从节点1的队列1中拉取消息进行消费。
4、集群节点类型
(1)磁盘节点
将配置信息和元信息存储在磁盘上
(2)内存节点
将配置信息和元信息存储在内存当中
性能是优于磁盘节点的
以上就是rabbitmq集群原理的介绍了,篇幅有限,假如你还想了解更多关于rabbitmq相关的内容,可以继续通过本站的java架构师栏目来了解哦。
推荐阅读: