rabbitmq 訊息收發是按順序收發,一般情況下是先收到的訊息先處理,即可以實現先進先出的訊息處理。但如果訊息者宕機或其他原因,導致訊息接收以後,未確認,那麼訊息會重新requeue到佇列中,就打破了訊息的順序處理原則。如果我們有乙個優先順序特別高的訊息需要處理,有沒有特權呢?答案是在不搞小動作的情況下是沒有,即所有訊息的優先順序都是一樣,按照順序排隊處理。
如果某個訊息特別緊急,必須優先處理呢?答案就是必須走後門,設定高優先順序。這次我們來聊下佇列優先順序。
優先順序佇列,顧名思義,具有更高優先順序的佇列具有較高的優先權,優先順序高的訊息具備優先被消費的特權。
優先順序佇列的配置:
在rabbitmq webui介面中,add queue是通過新增arguments或者是在**中新增效果是一樣的,取值範圍在0~255之間
新增的優先順序佇列,可以看到有特殊標識pri,代表是優先順序佇列,具有特權,滑鼠移動到pri上面會顯示權值。
優先順序佇列:
只有當消費者不足,不能及時進行消費的前提下,優先順序佇列才能發揮作用。
佇列、訊息都要設定優先順序,優先順序佇列才可生效,以較小值為準。
佇列優先順序只能宣告一次,不可改變。
優先順序佇列在記憶體、磁碟、cpu都會有消耗,不建議建立大量的優先順序佇列。(勞民傷財的事要少幹)
在消費端速度大於生產端速度,且broker中沒有訊息堆積的話,對傳送的訊息設定優先順序也沒什麼實際意義,因為傳送端剛傳送完一條訊息就被消費端消費了,那麼就相當於broker至多只有一條訊息,那麼對於單條訊息來說優先順序是沒有什麼意義的。
有指定優先順序的訊息會將優先順序以0對待。 對於超過優先順序佇列所定最大優先順序的訊息,優先順序以最大優先順序對待。對於相同優先順序的訊息,後進的排在前面
優先順序佇列實現了特殊情況下,訊息的優先處理。要使用訊息優先處理,需要佇列配置成優先順序及訊息自身的優先順序才可以實現。這就相當於乙個nb部門,如果你是boss,那麼你的許可權就可以非常大,但如果你只是乙個小弟,那麼對不起,你仍然沒有那麼大的許可權,雖然你所在的部門非常nb。
避免優先順序佇列的濫用。
RabbitMQ之死信佇列 延遲佇列 優先順序佇列
從機制上看,rabbitmq除了有topic和queue的概念,發訊息的時候要指定訊息的key,這個key之後會做路由key使用 還有乙個概念叫做交換機exchange,exchange有四種,drdirect fanout topic header。就是說發訊息給rabbitmq時,訊息需要有個k...
C 佇列學習筆記 RabbitMQ優先順序佇列
在具體業務中可能會遇到一些要提前處理的訊息,比如普通客戶的訊息按先進先出的順序處理,vip客戶的訊息要提前處理。在rabbitmq中,訊息優先順序的實現方式是 在宣告queue時設定佇列的x max priority屬性,然後在publish訊息時,設定訊息的優先順序即可。rabbitmq優先順序佇...
如何基於RabbitMQ實現優先順序佇列
由於種種原因,rabbitmq到目前為止,官方還沒有實現優先順序佇列,只實現了consumer的優先順序處理。但是,迫於種種原因,應用層面上又需要優先順序佇列,因此需求來了 如何為rabbitmq加入優先順序佇列特性。查詢資料後,得知rabbitmq雖然官方沒有支援此特性,但是社群已經有相關優先順序...