RabbitMQ 學習系列7 進階(延遲佇列、優先順序佇列、延遲) 3
阿新 • • 發佈:2021-06-10
4.5 優先順序佇列
是指優先順序高的訊息具備優先被消費的特權,可以通過設定佇列的x-max-priority引數來實現。如下所示:
//定列一個優先順序佇列 channel.QueueDeclare("queue.priority",true,false,false, new Dictionary<string, object>() { {"x-max-priority",10 } });
通過web管理頁面可以看到 "pri" 的標識,如下所示:
上面的程式碼演示的是如何配置一個佇列的最大優先順序,為10。在此之後,需要在傳送時在訊息中設定訊息當前的優先順序,示例程式碼如下:
var pro = channel.CreateBasicProperties(); pro.Priority = 5; //釋出訊息 channel.BasicPublish(exchangeName, routeKey,true, pro, sendBytes);
上面的程式碼中設定訊息的優先順序為5,預設最低為0,最高為佇列設定的最大優先順序。優先順序高的訊息可以被優先消費,這個也是有前提的:如果在消費者的消費速度大於生產者的速度且broker中沒有訊息堆積的情況下,對傳送的訊息設定優先順序也就沒什麼實際意義。
4.6 RPC實現
後續瞭解
4.7 持久化
rabbitmq的持久化分為三個部分:交換器的持久化、佇列的持久化和訊息的持久化。
交換器的持久化是通過在宣告交換器時將durable引數置為true實現的。對一個長期使用的交換器來說,建議將其置為持久化.
佇列的持久化是通過在宣告佇列時將durable引數置為true實現的。如果不設定持久化,那麼rabbitmq服務重啟之後,相關佇列的元資料會丟失,此時資料也會丟失。佇列沒了,訊息也就沒了。
佇列的持久化能保證其本身的元資料不會因異常情況而丟失,但並不能保證內部所儲存的訊息不會丟失,要確保訊息不會丟失,需要將其設定為持久化。通過將訊息的投遞模式(deliverModel)設定為2即可實現訊息的持久化。
設定了佇列和訊息的持久化,當rabbitmq服務重啟之後,訊息依舊存在,如果單單隻設定佇列持久化,重啟之後訊息會丟失;單單隻設定訊息的持久化,重啟之後佇列消失,繼而訊息也會丟失。單單設定訊息的持久化而不設定佇列的持久化顯得毫無意義。