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服務器重啓後消息同樣會丟失。並且過大的壓力可能會出現各類各樣的異常狀況,這並非咱們想要看到的 spa

image

 

使用lazy queue會有如下幾種搭配設計

lazy queue 消息不持久化 , 可是這種模式仍是會把消息放到硬盤裏,RAM的使用率會一直很穩定,可是重啓後同樣會丟失消息 code

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

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

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