RabbitMQ Lazy Queue 延遲加載


Lazy Queue

在著名的單例設計模式中就有懶漢式的實現方式,也就是只有在你需要的時候我才去加載。

這讓博主想到了以前上學的時候,每到了假期的假期作業,在假期的時候是從來不做的。只有在快開學老師要檢查的時候才去做,這也是一個懶漢式的體現,哈哈。

而RabbitMQ也是有lazy queue的,queue中的消息存在磁盤只有在consumer來找它要了,才會加載到內存。

下面是官方文檔,可以看到去lazy queue的介紹,lazy queue是在3.6.0版本被引入的,lazy queue的信息盡可能的都保存在磁盤上,僅在消費者請求的時候才會加載到RAM中。

使用默認的queue,並且消息不持久化的話,都是放在RAM中的。當消息峰值的時候,大量的消息在RAM導致rabbitmq服務器壓力過大,當RAM使用量到一定數字的時候就會因為壓力把數據移到硬盤中,但是不要嗨皮,rabbitmq服務器重啟后消息一樣會丟失。而且過大的壓力可能會出現各種各樣的異常情況,這並不是我們想要看到的

image

 

使用lazy queue會有以下幾種搭配

lazy queue 消息不持久化 , 但是這種模式還是會把消息放到硬盤里,RAM的使用率會一直很穩定,但是重啟后一樣會丟失消息

lazy queue 消息持久化,這種方式無疑是最佳搭配,消息放到硬盤並且不會因為服務器重啟而丟失,面對高並發也是從容不已

設置lazy queue也很簡單,下面代碼是一個示例,x-queue-model : lazy

//聲明一個懶隊列
                channel.QueueDeclare("lazyqueue", true, false, false, new Dictionary<string, object>
                {
                    { "x-queue-mode","lazy"}
                });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM