RabbitMQ Policy的使用

RabbitMQ做爲最流行的MQ中間件之一,普遍使用在各種系統中,今天咱們就來討論一下如何經過Policies給RabbitMQ中已經建立的Queue添加屬性和參數。html

Policise 的做用

一般來講,咱們會在建立一個Queue時指定了隊列的各項屬性和參數,例如message-ttlx-dead-letter-exchangex-dead-letter-route-keyx-max-length等,一旦RabbitMQ建立Queue成功,則不容許再修改Queue的任何屬性或參數,除非刪除重建。正則表達式

咱們在實際使用中,隨着業務的變化,常常會出現須要調整message-ttlx-max-length等參數來改變Queue行爲的場景,那這個時候怎麼辦呢,總不能暫停上下游的生產者和消費者來等Queue的刪除重建吧?這個時候就須要使用到RabbitMQ的Policy機制了。code

本文的重點是如何使用Policy,更多關於Policy的意義可參考 Why Policies Existhtm

Policies 的使用

建立Policy

Policies是RabbitMQ的Server端機制,不能經過Client來建立,RabbitMQ支持如下幾種方式來建立Policy:中間件

  1. rabbitmqctl
  2. Http API
  3. Management Plugin Web UI

這裏選擇最直觀的 Web UI方式來說,Web UI建立Policy的界面在 Admin Tab頁中的Policies右側導航欄,如圖:
blog

點擊進入後,能夠看到4塊內容,User PoliciesAdd / update a policyOperator PoliciesAdd / update an operator policy
排序

打開Add / update an operator policy
rabbitmq

從界面上能夠很是直觀的看到一個Policy須要的元素:隊列

  • Virtual host
  • Name:
    這個Policy的名稱
  • Pattern:
    Policy根據正則表達式去匹配Queues/Exchanges名稱
  • Apply to:
    這個Policy對Queue仍是對Exchange生效,或者二者都適用
  • Priority:
    優先級。
  • Definition:
    添加的args,KV鍵值對。

Definition 可添加的args參考如下文檔:ci

Operator Policy

簡單說明一下 Operator Policy 和 User Policy 的區別:

  • Operator Policy 是給服務提供商或公司基礎設施部門用來設置某些須要強制執行的通用規則
  • User Policy 是給業務應用用來設置的規則

Operator Policy 和 User Policy 會合並後做用於隊列,而且爲防止 Operator Policy 對隊列某些關鍵屬性例如死信隊列交換器Dead Letter Exchange的覆蓋致使業務應用產生非預期的結果,Operator Policy 只支持 expiremessage-ttlmax-lengthmax-length-bytes 4個參數。更多信息請參考 Difference From Regular Policies

Policies 之間的優先級

在設置Policy時須要注意,由於Policy是根據parttern匹配隊列的,所以可能會出現多個Policy都匹配到某一個隊列的狀況,此時會依據如下規則進行排序選出實際生效的Policy:

  1. 首先根據priority排序,值越大的優先級越高;
  2. 相同priority則根據建立時間排序,越晚建立的優先級越高。
相關文章
相關標籤/搜索