云消息隊列 RocketMQ 版提供了三種消息查詢的方式,分別是按Message ID、Message Key以及Topic查詢。您可以通過消息查詢驗證消息是否發送成功、驗證消息發送的內容是否正確、以及進一步查看消息的軌跡信息。
查詢方式說明
由于消息在云消息隊列 RocketMQ 版中存儲的時間默認為3天(不建議修改),即只能查詢從當前查詢時間算起3天內的消息。例如,當前時間是2019年06月10日15:09:48,那么能查詢到的某Topic下的消息最早的時間點為2019年06月07日15:09:48。
三種查詢方式的特點和對比如下表所述。
查詢方式 | 查詢條件 | 查詢類別 | 說明 |
按Message ID查詢 | Topic+Message ID | 精確查詢 | 根據Topic和Message ID可以精確定位任意一條消息,獲取消息的屬性。 |
按Message Key查詢 | Topic+Message Key | 模糊查詢 | 根據Topic和Message Key可以匹配到包含指定Key的最近64條消息。 重要 建議消息生產方為每條消息設置盡可能唯一的Key,以確保相同的Key的消息不會超過64條,否則消息會漏查。 |
按Topic查詢 | Topic+時間段 | 范圍查詢 | 根據Topic和時間范圍,批量獲取符合條件的所有消息,查詢量大,不易匹配。 |
推薦查詢過程
推薦按照以下流程查詢消息。
操作步驟
登錄云消息隊列 RocketMQ 版控制臺,在左側導航欄,單擊實例列表。
在頂部菜單欄,選擇地域,如華東1(杭州)。
在實例列表頁面,找到目標實例,在其操作列,單擊更多,然后在下拉菜單中,選擇消息查詢。
在消息查詢頁面,您可選擇以下任意一種查詢方式,然后按頁面提示輸入相應信息,再單擊查詢來查詢消息。
按 Message ID 查詢
按Message ID查詢消息屬于精確查詢,您輸入Topic和Message ID即可精確查詢到任意一條消息。因此,為了盡可能精確地查詢,建議在發送消息成功后將Message ID信息打印到日志中,方便問題排查。
以Java SDK為例,獲取Message ID的方法如下。
SendResult sendResult = producer.send(msg); String msgId = sendResult.getMessageId();
其他語言可參見SDK參考概述。
按 Message Key 查詢
云消息隊列 RocketMQ 版根據您設置的Message Key建立消息的索引信息,當您輸入Key進行查詢時,云消息隊列 RocketMQ 版根據該索引即可匹配相關的消息返回。
重要按Message Key查詢的條件是您在發送消息時已設置Message Key屬性。
按Message Key查詢僅返回符合條件的最近的64條消息,因此建議您盡可能保證設置的Key是唯一的,并具有業務區分度。
設置Message Key的方法如下。
Message msg = new Message("Topic","*","Hello MQ".getBytes()); /** * 對每條消息設置其檢索的Key,該Key值代表消息的業務關鍵屬性,請盡可能全局唯一。 * 以方便您在無法正常收到消息情況下,可通過消息隊列RocketMQ版控制臺查詢消息。不設置也不會影響消息正常收發。 */ msg.setKey("TestKey"+System.currentTimeMillis());
按 Topic 查詢
按Topic查詢一般用在Message ID和Message Key都無法獲得的情況下,根據Topic和消息的發送時間范圍,批量獲取該時間范圍內的所有消息,然后再找到關心的數據。
重要若按Topic查詢消息,請注意以下幾點:
按Topic查詢屬于范圍查詢,獲取Topic下符合時間條件的所有消息,消息量大,建議盡量縮短查詢區間。
按Topic查詢消息量大,采用分頁展示。
查詢結果說明
您可以在控制臺的消息查詢頁面看到查詢到的消息。直接顯示的信息包含Message ID、Tag、Key、生成時間及存儲時間。此外,您還可以查詢消息軌跡、進行消費驗證或下載消息。
消費驗證
云消息隊列 RocketMQ 版提供了消費驗證功能,該功能可以將指定消息推送給指定的在線客戶端,以檢測客戶端消費該消息的邏輯和結果是否符合預期。
消費驗證功能僅用于驗證客戶端的消費邏輯是否正常,并不會影響正常的收消息流程,因此消息的消費狀態等信息在消費驗證后并不會改變。
消費驗證功能僅用于驗證客戶端的消費邏輯是否正常,并不會影響正常的收消息流程,因此消息的消費狀態等信息在消費驗證后并不會改變。
相關文檔
您可以根據消息查詢結果進一步查看消息的軌跡信息,查看消息的消費狀態和消費結果。具體操作,請參見查詢消息軌跡。