消息中间件—RabbitMQ(四)集群

一、集群目的

为了解决高可用和负载问题。

二、集群节点类型

节点分为内存节点和磁盘节点,磁盘节点用来做持久化,内存节点做应用访问。
集群的互相通信端口为25672。

三、集群类型

1、普通集群

普通集群中,只有一个节点会存储一个队列的全部消息,其他节点将只存储该队列的元数据,当有请求发送至其他节点时,其他节点将把消息转发过去,向存储消息的节点继续请求,以此获得消息。

  • 优点:效率很高,不需要在发生写操作时将数据同步给全部节点
  • 缺点:可靠性不足,一旦存储队列消息的节点崩溃,其他节点也就永远失去了这部分消息。
    消息中间件—RabbitMQ(四)集群_第1张图片

2、镜像队列

镜像队列中,所有的节点都会存储所有队列的元数据与消息,此做法的优缺点和普通集群刚好相反。

消息中间件—RabbitMQ(四)集群_第2张图片

四、负载均衡

当有多个主机节点需要选择时,需要负载均衡选择连接哪一个节点,但负载均衡只单机运行是不够的,因为一旦这个负载均衡挂掉,就无法对任何节点提供连接,那么只能集群部署负载均衡,但是集群部署的负载均衡也无法决定到底连接哪一个节点,于是又回到了第一个问题,陷入死循环。好在HAProxy为我们提供了一个解决方案。
在如下的结构图中,应用访问一个固定的IP地址,Keepalived的集群将会竞争这个IP,竞争到IP的Keepalived就会和应用连接,同时Keepalived和HAProxy保持心跳连接,HAProxy做负载均衡,可以和任意一个RabbitMQ的内存节点进行连接,注意,HAProxy不一定非要和RabbitMQ节点部署在同一台服务器上,分开部署也是可以的。最后,应用节点与磁盘节点有镜像复制数据,实现持久化。

消息中间件—RabbitMQ(四)集群_第3张图片

五、一些情况

1、如何追溯消息的发送

可以增加一张消息表,以此来对所有的消息进行记录和重发。

2、消息全流程追踪

FireHose和Tracing GUI功能可以实现消息的全流程追踪,

3、大量消息发送

在通常情况下,一条消息发送一次就够了,但大量的消息发送会导致连接数过多,这时可以考虑批量发送消息,比如将多条消息拼接,然后一次性发送,减少连接数消耗。

你可能感兴趣的:(消息中间件,java)