(八)消息队列——RabbitMQ的惰性队列

  • 消息队列——惰性队列
    • 一、消息堆积问题:
    • 二、惰性队列:
      • 1、背景:
      • 2、惰性队列:
      • 3、设置惰性队列:
    • 三、总结:

消息队列——惰性队列

一、消息堆积问题:

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。

解决消息堆积有三种种思路:

  1. 增加更多消费者,提高消费速度
  2. 在消费者内开启线程池加快消息处理速度
  3. 扩大队列容积,提高堆积上限

二、惰性队列:

1、背景:

RabbitMQ的队列是内存存储的,在高并发的情况下,数百万的消息如果都扔到内存中,显然不是很合适。因为MQ对内存的存储也会有一个预警值,如果达到预警值,MQ则会处于暂停状态,阻止生产者投递消息到MQ,然后将这部分消息刷出到磁盘,清理一部分的内存空间出来。 因此MQ的并发能力会出现一种波浪状态,性能不够稳定。

2、惰性队列:

从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的概念,也就是惰性队列。可以用来解决消息堆积问题。如果一个队列堆积比较严重,就可以把这个队列开启为惰性队列。

  1. 接收到消息后直接存入磁盘而非内存
  2. 消费者要消费消息时才会从磁盘中读取并加载到内存
  3. 支持数百万条的消息存储

虽然惰性队列性能稳定,但是增加了一些磁盘的IO,从消息的发送要接收会有一定的延迟,但也在可以接受的范围内。

3、设置惰性队列:

要设置一个队列为惰性队列,只需要在声明队列时,指定x-queue-mode属性为lazy即可。

可以通过命令行将一个运行中的队列修改为惰性队列:
^lazy-queue$ 用来匹配队列的名称,匹配到的就设置为惰性队列。
在这里插入图片描述
(八)消息队列——RabbitMQ的惰性队列_第1张图片

三、总结:

(八)消息队列——RabbitMQ的惰性队列_第2张图片

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