00:00
我们再讲一下惰性对立啊。惰性对立的使用场景是什么场景呢?就是一般是消费者下线了,宕机了,或者是由于维护而关闭了,什么意思来说一下。咱们的惰性队列。对,惰性队列指的其实就是消息的一个存放地。来说说啊叫。惰性。等会啊,度是这个度啊。就是懒的意思是吧,哎,惰性队列。指的意思就是消息保存在内存中还是在?还是在。磁盘上对,其实就是保存位置的问题。那么多形队列呢,在正常情况下啊,咱们说说正常情况下啊,正常。知道。正常情况下。
01:01
消息是保存在内存中的,对,这样呢它呢就可以消费的快一些。但是在。惰性队列。队列情况下,它的消息是保存在磁盘上的啊,磁盘中。所以看一下这个区别。那么什么意思呢?就这呢。当我们发送一条消息到达MQ当中,如果这个MQ当中队列正好是惰性队列,它会马上将消息存放在磁盘里,并不是存放在内存里。完消费者需消费,需要先从磁盘里读取到内存中。完之后再进行消费。那你说慢不慢?慢对,所以惰性队列在正常情况下,它的消费速度是慢的。我们一般不采用惰性队列,那什么时候会采用多惰性队列呢?就是当例如发消息过来,哎,积压了有100万了,所以100。
02:06
消息,但是很可惜,消费者的宕机了。或者是关闭了。这就会造成大量的MQ当中堆积了大量的消息,没有人消费。这个时候采用惰性队列就非常适合,为什么呢?因为它会把100万的消息存放在磁盘上,就不会浪费MQ的内存了。是吧,不会造成MQ消息的积压。所以惰性队列使用在什么场景?消费者宕机对,你看一下文档上说使用在消费者下线宕机或者是处于维护而关闭等导致长时间内不能消费消息而造成的积压时,惰性队列就很有必要了。但是呢,惰性队列好吗?也不是非趁是吧,就是在执行性能方面不是很好。
03:04
所以呢,我们默认情况下一般不是用惰性惰性队列的啊,是用了一个正常队列,正常队列是存放在内存当中的。这就使得惰性队列我们有两种模式。第一种模式。是一个deff模式,第二种模式是一个惰性模式,这个单词念懒惰是吧,哎,惰性模式默认情况下是抵缝模式。在3.6.0之前的版本无需做任何变更。那么惰性模式,哎,这LA lazy模式就是惰性模式。可以通过创声明队列的时候去参数中设置。也可以通过这个策略方式设置。不管哪种方式都是可以的。那么策略方式具备更高的优先级啊,如果两种方式都设置的话。那么声明的方式已改变了已有的队列的模式的情况下,那么只能先删除队列,再重新声明一个新的,这个就是一路下来都是啊,只要你把队列的模式给改了,那么就必须要先删除原来的队列,再生成新的队列,那么设置的方式,Java代码是这么设置的。
04:14
也就是说,你在声明队列时,在最后一个参数这个位置设置一个叫做队列模式为懒惰模式。对吧,这这种方式就可以设置,如果你用网页来设置啊,用用页面来设置,是这么设置你看。这个位置是这么,我刷新一下啊。你设置一个队列,那么参数这个位置你选择谁呢?选择懒惰模式。这个时候呢,就会出现一个队列模式为多少懒惰诶这种。就是我们。一个惰性队列的一个设置方式,通过页面也可以设置,通过加码代码也设置可以设置。我们就不再演示一遍了,完之后呢,咱们说一说它的性能。对内存开销对比。
05:01
内存开销对比呢?我们是以这个100万的消息来对来演示的,每条消息大约占1KB,发了多少100万条数据,在普通队列情况下,内存将消耗消耗消耗1.2个G。而惰性队列仅仅消耗1.5MB。那么难道消息丢失了吗?并没有丢失,因为在惰性对立的情况下,它的消息应该放在放在哪儿了?放在磁盘里了,对,所以内存当中只剩下一些所引。什么叫索引呢?就是一旦需要消费这些消息的时候,通过这些索引到磁盘上去找相应的。消息。在内存的这个比拼当中,惰性队列内存消耗小。正常的队列内存消耗比较大。对。但是不好的地点就是惰性队列,消费消息的时候比较慢,因为它需要先从磁盘上读取消息,到内存完了再被消费。
06:06
所以各有优缺点,一定要看场合和场景。只有适合才是最好的嘛。
我来说两句