RabbitMQ之惰性队列与镜像队列

文章目录

        • 1、惰性队列
          • 1.1、使用场景
          • 1.2、定义
          • 1.3、队列模式
          • 1.4、工作流程
          • 1.5、总结
        • 2、镜像队列
          • 2.1、消息流转过程
          • 2.2、负载均衡
          • 2.3、消息的可靠性
          • 2.4、GM协议
          • 2.5、镜像队列宕机
          • 2.6、镜像队列启动与停止顺序

1、惰性队列
1.1、使用场景

从前几篇文章中,可以知道,整个消息中间件的运行过程如下图所示:
在这里插入图片描述
生产者将消息发送给rabbitMQ,然后消费者可以从对应的队列中读取消息进行消费,一般都是先从内存中读取消息,如果有持久化消息,那么再从磁盘中读取消息,当然如果从磁盘中找到了对应的消息就不需要再从磁盘中读取了。所以可以理解为消费者读取消息都是先内存读取再磁盘读取,消息一般存储在内存当中。

那么试想一下,当生产者生产消息足够快,或者说消费者机器宕机,那么内存中的消息是不是持续增加?那么就会内存压力非常大,当然你可以说我可以把一部分消息存储在磁盘当中啊,当然在消息量不大的时候,确实可行,但是是否考虑到在消息大爆发的时候,MQ服务器终究会撑不住,而且这样还会影响其它队列的消息收发。

那么是否有办法解决这一种情况呢?当然有的,rabbitMQ提供了一种惰性队列专门解决这种情况。现在来看一下官网给出的惰性队列的测试数据:

  • 对于内存的消耗测试:当发送1千万条消息,每条消息的大小为1KB,并且此时没有任何的消费者,那么普通队列会消耗1.2GB的内存,而惰性队列只消耗1.5MB的

你可能感兴趣的:(RabbitMQ,队列,分布式,java)