六.RabbitMQ消息的持久化優先級

01 消息持久化

其實在前面的文章中已經介紹了exchange和queue的持久化,把exchange和queue的durable屬性設置爲true,重啓rabbitmq服務時( 重啓命令:rabbitmqctl stop_app ;rabbitmqctl start_app ),exchange和queue也會恢復。我們需要注意的是:如果queue設置durable=true,rabbitmq服務重啓後隊列雖然會存在,但是隊列內的消息會丟全部丟失。那麼怎麼實現消息的持久化呢?實現的方法很簡單:將exchange和queue都設置durable=true,然後在消息發佈的時候設置persistent=true即可。

下面就直接來看一個案例:如下圖所示

聲明exchange和queue時設置durable=true,然後執行上邊的代碼,傳入一條消息。重啓rabbitmq後,exchange,queue和消息都會恢復。我們也可以在web管理界面設置消息持久化,如圖:

 

 

這裏就需要同學們按照老師這裏的案例配置起來,發送一條消息、然後重新RabbitMQ服務;然後查看消息;如果持久化,那麼消息已然存在;

 

 

02 消息優先級

我們知道queue是先進先出的 如圖,即先發送的消息,先被消費。

 

但是在具體業務中可能會遇到要提前處理某些消息的需求,如一個常見的需求:普通客戶的消息按先進先出的順序處理,Vip客戶的消息要提前處理。消息實現優先級控制的實現方式是:首先在聲明queue是設置隊列的x-max-priority屬性,然後在publish消息時,設置消息的優先級等級即可。爲了演示方便,約定所有vip客戶的信息都以vip開頭,請看下圖中的代碼實現:如圖4、圖5 請配合查看;

 

把生產者和消費者都運行起來,結果如下;消費者並沒有按照寫入的順序,來讀取,因爲寫入消息的時候,設置了優先級;包含vip內容的優先級最高;所以就先被消費掉了;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章