1. 程式人生 > 其它 >RabbitMQ 學習系列7 進階(延遲佇列、優先順序佇列、延遲) 3

RabbitMQ 學習系列7 進階(延遲佇列、優先順序佇列、延遲) 3

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服務重啟之後,訊息依舊存在,如果單單隻設定佇列持久化,重啟之後訊息會丟失;單單隻設定訊息的持久化,重啟之後佇列消失,繼而訊息也會丟失。單單設定訊息的持久化而不設定佇列的持久化顯得毫無意義。