Queue是指訊息佇列,雲訊息佇列 RabbitMQ 版的訊息都會被投入到一個或多個Queue中。本文介紹如何在雲訊息佇列 RabbitMQ 版控制台建立訊息的儲存資源Queue、查看Dashboard大盤、被Exchange綁定、向指定Queue發送訊息、查看Consumer Tag、清空Queue和刪除Queue。
背景資訊
Consumer Tag是Consumer用戶端的標識符。您可以在雲訊息佇列 RabbitMQ 版的Consumer用戶端設定Consumer Tag。如果您沒有在雲訊息佇列 RabbitMQ 版的Consumer用戶端設定Consumer Tag,雲訊息佇列 RabbitMQ 版服務端會為您自動產生一個唯一的Consumer Tag。建議使用系統預設Consumer Tag,不自訂設定Consumer Tag。
Consumer Tag必須保持唯一,即已被某個Consumer使用的Consumer Tag不可同時被另一個Consumer使用。
用戶端使用的SDK在記錄串連上有哪些消費者時,採用Map<String, Consumer>進行記錄,其中Key為Consumer Tag。如果一個串連上存在多個消費者具有相同的Consumer Tag,在串連自動重連後,該串連下的相同Consumer Tag僅會有一個消費者恢複消費,其他消費者將不會自動回復。
建立Queue
登入雲訊息佇列 RabbitMQ 版控制台,然後在左側導覽列選擇实例列表。
在实例列表頁面的頂部功能表列選擇地區,然後在執行個體列表中,單擊目標執行個體名稱。
在左側導覽列,單擊Queue 列表。
在Queue 列表頁面,在当前 Vhost右側的切换下拉式清單中,選擇Vhost,單擊创建 Queue。
在创建 Queue面板,配置以下參數,然後單擊确定。
參數
描述
說明
Queue 名称
Queue的名稱
只能包含字母、數字、短劃線(-)、底線(_)、半形句號(.)、井號(#)、正斜線(/)、at符號(@)。
長度限制在1~255字元。
建立後無法修改,只能刪除重建。
以amq.開頭的為保留欄位,因此不能使用。例如:amq.test。
Auto Delete
最後一個Consumer取消訂閱後,Queue是否自動刪除。
true:在訂閱該Queue訊息的最後一個Consumer取消訂閱該Queue的訊息後,自動刪除該Queue。
false:在訂閱該Queue訊息的最後一個Consumer取消訂閱該Queue的訊息後,不自動刪除該Queue。
重试策略
配置Queue重試策略。各執行個體策略參數取值,請參見執行個體重試策略參數說明。
是否繼承執行個體配置:
是:繼承執行個體預設配置。
否:自訂配置。
最大投遞次數:系統將一條訊息嘗試投遞給消費者的最大次數限制。單位:次。
消費逾時時間:消費者在接收和處理訊息時允許的最大時間限制。單位:秒。
死信策略
Queue的參數設定,可用於設定死信Exchange、死信Routing Key和訊息存活時間。
DeadLetterExchange:指定死信訊息發送的目標Exchange。
DeadLetterRoutingKey:指定死信訊息的Routing Key,即死信Exchange會將訊息發送至匹配該死信Routing Key所對應的Queue。
MessageTTL:訊息存活時間,單位毫秒(ms)。在指定時間內未被成功消費的訊息會變成死信訊息,該訊息將會被發送到死信Exchange。更多資訊,請參見訊息存活時間。
常見問題
能否指定特定用戶端消費訊息?
目前不支援指定特定用戶端消費訊息。訊息分發遵循 RabbitMQ 標準機制,按輪詢(Round-Robin)或優先順序(Priority)策略在各 Consumer 用戶端間分配,無法將訊息固定發送給特定用戶端。
如何通過代碼建立順序隊列(x-single-active-consumer)?
控制台暫不支援配置 x-single-active-consumer 參數,需通過 SDK 代碼建立順序隊列。建立時,使用 channel.queueDeclare 方法,並在 arguments 參數中設定 "x-single-active-consumer": true。樣本如下:
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-single-active-consumer", true);
channel.queueDeclare("your-queue-name", true, false, false, arguments);為什麼代碼自動建立隊列失敗(Failed to declare queue)?
雲訊息佇列 RabbitMQ 版不支援通過代碼自動建立隊列(Auto-create)。使用隊列前,必須先在控制台或通過 API 手動建立 Queue,再在代碼中使用 channel.queueDeclare 綁定已有的 Queue,否則將報錯 Failed to declare queue。
Queue 最大限制個數調整
如果執行個體可建立的 Queue 數量已達到上限,可根據執行個體類型通過以下方式調整:
企业版、专业版、铂金版執行個體:在執行個體詳情頁或執行個體列表的操作區,單擊升配,前往購買頁面完成升配。
(共享)按累积量、(共享)预留+弹性、(独享)预留+弹性執行個體:在執行個體詳情頁右上方,單擊修改配额,調整 Queue 數量上限。
各執行個體類型可支援的 Queue 數量上限,請參見使用限制中、叢集限制下的「單一實例可建立的 Queue 數量」。
查看統計資料
您可以查看各種指標資料,協助您及時發現和定位問題。
查看Consumer Tag
雲訊息佇列 RabbitMQ 版僅支援查看線上Consumer用戶端的Consumer Tag,不支援查看離線Consumer用戶端的Consumer Tag,您需要確保要查看Consumer Tag的Consumer用戶端處於線上狀態。
在Queue 列表頁面,選擇指定Queue,在其操作列,選擇。
被Exchange綁定
在Queue 列表頁面,選擇指定Queue,在其操作列單擊详情。
在Queue 详情頁面單擊被绑定信息頁簽,單擊添加被绑定。
在添加被绑定面板,選擇源Exchange,在Routing Key文字框輸入Routing Key,然後單擊确定。
說明若被綁定的Exchange的類型為x-consistent-hash時,Routing Key表示綁定的Queue的權重,只能設定為整數,取值範圍為[1~20]。
發送訊息
Queue添加被綁定關係後,可直接在控制台發送訊息,將訊息從源Exchange發送到指定的Queue中。
在Queue 列表頁面,選擇指定Queue,在其操作列單擊详情。
在Queue 详情頁面,選擇被绑定信息頁簽。
在被綁定關係列表中,選擇指定的綁定關係,在其操作列單擊发送消息。
在彈出的发送消息面板中輸入messageId和messageBody,然後單擊确定。
當使用預設 Exchange(exchange 為空白)發送訊息時,Routing Key 必須與已存在的 Queue 名稱完全一致;同時,用戶端帳號需擁有對該 Queue 的寫入權限。若 Queue 不存在或許可權不足,訊息將被丟棄,且控制台無發送記錄。
清空Queue
在Queue 列表頁面,選擇指定Queue,在其操作列,選擇。
刪除Queue
刪除Queue時,Queue中未被消費的訊息會被同時刪除,且不可恢複。請您謹慎操作。
在Queue 列表頁面,根據需要選擇如下任意一種方式刪除Queue。
刪除單個Queue:找到要刪除的Queue,在其右側操作列,選擇。
您也可以單擊目標Queue,或在其右側操作列,單擊详情,在Queue 详情頁面右上方單擊删除。
刪除多個Queue:選中要刪除的Queue,單擊Queue列表下方的批量删除。
在提示對話方塊,認真閱讀提示資訊,單擊確認。