消费者可以使用集群:来提升消费能力,消费数据不重复。同时消费端能避免单点故障问题。
rabbitmq 集群中节点包括内存节点(RAM),磁盘节点(DISK,消息持久化),集群中至少有一个DISK节点。如果DISK节点宕机,集群可用,但不用进行消息服务,所以在生成环境中建议至少2个以上DISK节点。
集群模式:
1、普通模式(默认)
对于普通模式,各节点有着相同的队列结构,但消息只会存在某一个节点内。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMq会将消息从A节点取出,并经过B发送给消费者。
应用场景:该模式适合于消息无需持久化的场合,例如:日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若成为持久化,只能等故障节点恢复。
2、镜像模式
与普通模式不同之处是消费实体会主动在镜像节点之间同步数据,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。
应用场景:可靠性要求较高的场合,例如:下单,库存队列
缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯锁损耗。
注意:1、镜像集群也是基于普通集群,即只有先单间普通集群,然后设置镜像队列。
2、若消费过程中,master挂掉,则选择新的master,若未来得以确认,则可泵会重复消费