我的观点是 RabbitMQ 不适合做集群,用 RabbitMQ 做集群还不如直接用 kafka,毕竟人家先天就具有高可用的特性
RabbitMQ 有两种集群模式:
普通模式:集群中各个节点之间只会相互同步元数据,元数据包括
队列元数据包括队列名称和它们的属性,比如是否可持久化,是否自动删除
交换器元数据交换器名称、类型、属性
绑定元数据内部是一张表格记录如何将消息路由到队列
vhost 元数据为 vhost 内部的队列、交换器、绑定提供命名空间和安全属性
该模式的特点:一个消息在众多节点中只会保存一份,如果接受请求的节点不是在该消息所在队列的节点上,则MQ内部会通过分布式通信框架 OTP 来进行这两个节点之间的通信来响应客户端,例如:消息进入 rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把 rabbit01 中的消息实体取出并经过 rabbit02 发送给 consumer。所以 consumer 应尽量连接每一个节点,从中取消息。
镜像模式:是真正的集群模式,元数据和队列数据每个节点中都有一份,所以可用性更高
各个节点之间没有所谓的主从,主备的角色,因为集群本身并不提供负载均衡的作用 ,需要搭配其他的负载均衡器或者高可用软件 进行使用,麻烦得要死。。。。。。
网友评论