Lazy Queue
在著名的單例設計模式中就有懶漢式的實現方式,也就是只有在你需要的時候我才去加載。
這讓博主想到了以前上學的時候,每到了假期的假期作業,在假期的時候是從來不做的。只有在快開學老師要檢查的時候才去做,這也是一個懶漢式的體現,哈哈。
而RabbitMQ也是有lazy queue的,queue中的消息存在磁盤只有在consumer來找它要了,才會加載到內存。
下面是官方文檔,可以看到去lazy queue的介紹,lazy queue是在3.6.0版本被引入的,lazy queue的信息盡可能的都保存在磁盤上,僅在消費者請求的時候才會加載到RAM中。
使用默認的queue,並且消息不持久化的話,都是放在RAM中的。當消息峰值的時候,大量的消息在RAM導致rabbitmq服務器壓力過大,當RAM使用量到一定數字的時候就會因為壓力把數據移到硬盤中,但是不要嗨皮,rabbitmq服務器重啟后消息一樣會丟失。而且過大的壓力可能會出現各種各樣的異常情況,這並不是我們想要看到的
使用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"} });