說(shuō)明:惰性隊(duì)列是為了解決消息堆積問(wèn)題,當(dāng)生產(chǎn)者生產(chǎn)消息的速度遠(yuǎn)高于消費(fèi)者消費(fèi)消息的速度時(shí),消息會(huì)大量的堆積在隊(duì)列中,而隊(duì)列中存放的消息數(shù)量是有限的,當(dāng)超出數(shù)量時(shí),會(huì)造成消息的丟失。而擴(kuò)容隊(duì)列,實(shí)際上不太現(xiàn)實(shí),因?yàn)殛?duì)列的消息是存在內(nèi)存中的,內(nèi)存也有上限。
從RabbitMQ 3.6.0版本開始,增加了惰性隊(duì)列的概念(Lazy Queues),惰性隊(duì)列在接收到消息后是存到磁盤中,而不是內(nèi)存,只有當(dāng)消費(fèi)者消費(fèi)消息時(shí),才把消息從磁盤中讀取出來(lái),加載到內(nèi)存中。
使用
@RabbitListener方式
@RabbitListener(queuesToDeclare = @Queue(
name = "lazy.queue",
durable = "true",
arguments = @Argument(name="x-queue-mode", value="lazy")
))
public void listenerQueue(String message){
System.out.println("message = " + message);
}
@Bean方式
@Bean
public Queue lazyQueue(){
return QueueBuilder
.durable("lazy.queue")
.lazy()
.build();
}
正常隊(duì)列、惰性隊(duì)列各自發(fā)送10萬(wàn)條消息,觀察區(qū)別
(正常隊(duì)列)
(惰性隊(duì)列)
區(qū)別:
-
惰性隊(duì)列使用的內(nèi)存量大于正常隊(duì)列,因?yàn)樵黾恿舜疟P的寫入/讀取
-
惰性隊(duì)列消費(fèi)消息,速度較正常隊(duì)列更穩(wěn)定,當(dāng)然速度更慢(上面只是偶然情況,大多數(shù)情況比正常隊(duì)列慢)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-602954.html
總結(jié)
惰性隊(duì)列用于解決消息堆積問(wèn)題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-602954.html
到了這里,關(guān)于RabbitMQ惰性隊(duì)列使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!