rocketMq訊息查詢

2021-09-19 21:04:03 字數 1731 閱讀 3458

最近有人問我知道rocketmq是怎麼查詢訊息的,我發現我貌似回答不上來,所以抽空就把這塊內容補充一下,主要是講清楚根據key查詢訊息根據msgid查詢訊息兩塊內容。

看下引數列表中我們可以看到-k指出了核心key的引數,指定了根據key查詢訊息的方法,這個命令返回的是msgid,據說還有一些坑,可以參考網易團隊的這篇博文。

根據key查詢

查詢過程中我們從client端看可以看出來,其實根據key去查詢的過程中其實是遍歷所有broker去進行查詢的,然後針對查詢結果進行組合。

由於這個查詢過程中server端涉及到index物件,關於index部分的查詢參見《rocketmq - index介紹》博文。

根據key查詢-client-1

根據key查詢-client-2

根據key查詢-client-3

根據key查詢-client-4

根據key查詢-server-1

根據key查詢-server-2

根據msgid的查詢的引數如下圖所示,可以看出來核心的引數在於-i的引數,也就是msgid。根據msgid去查詢訊息的過程中最重要的當然是msgid的引數了。

根據msgid查詢

根據msgid查詢的核心點在於msgid的生成規律,其實msgid是有兩個部分組成的,分別是broker的address 和 commitlog的物理偏移量offset,也就是說通過messageid我們就能知道去哪個broker的哪個位置offset去獲取訊息體。

關於messageid的訊息體,可以見下圖中decodemessageid的類圖。

client端的查詢過程和server端的解析查詢過程都在下面的**中貼出來,相信大家應該都能夠看得懂的。

根據msgid查詢-client-1

根據msgid查詢-client-2

根據msgid查詢-client-3

根據msgid查詢-server-1

根據msgid查詢-server-2

根據msgid查詢-server-3

RocketMQ訊息型別

普通資訊也叫做無序訊息,簡單來說就是沒有順序的訊息,producer 只管傳送訊息,consumer 只管接收訊息,至於訊息和訊息之間的順序並沒 可能先傳送的訊息先消費,也可能先傳送的訊息後消費。舉個簡單例子,producer 依次傳送 order id 為 1 2 3 的訊息到 broker,co...

RocketMQ 事務訊息

一 事務訊息實現方式 應用使用事務訊息的步驟 1 應用傳送訊息,使用prepare欄位標示準備訊息 2 應用執行本地業務邏輯 3 應用傳送事務提交或回滾訊息 broker收到prepare訊息後會將topic替換為rmq sys trans half topic,queueid替換為0,然後寫入co...

順序訊息 RocketMQ

訊息有序指的是可以按照訊息的傳送順序來消費。rocketmq可以嚴格的保證訊息有序。但這個順序,不是全域性順序,只是分割槽 queue 順序。要全域性順序只能乙個分割槽。之所以出現你這個場景看起來不是順序的,是因為傳送訊息的時候,訊息傳送預設是會採用輪詢的方式傳送到不通的queue 分割槽 如圖 而...