rocketMq消息查询

系列

rocketMq概念介绍

rocketMq-namesrv介绍

rocketMq-Topic创建过程

rocketMq-producer介绍

rocketMq-consumer介绍

rocketMq - rebalance介绍

rocketMq - 并发消费过程

rocketMq - 串行消费过程

rocketMq-broker介绍

rocketMq-broker消息存储介绍

rocketMq - commitLog

rocketMq - index介绍

rocketMq-延迟消息介绍

rocketMq-事务消息介绍

rocketMq消息查询

rocketMq和kafka的架构区别

rocketMq - master/slave同步


概述

    最近有人问我知道rocketMq是怎么查询消息的,我发现我貌似回答不上来,所以抽空就把这块内容补充一下,主要是讲清楚根据key查询消息根据msgId查询消息两块内容。


根据key查询消息

    看下参数列表中我们可以看到-k指出了核心key的参数,指定了根据key查询消息的方法,这个命令返回的是msgId,据说还有一些坑,可以参考网易团队的这篇博文。

rocketMq消息查询_第1张图片
根据key查询

    查询过程中我们从client端看可以看出来,其实根据key去查询的过程中其实是遍历所有broker去进行查询的,然后针对查询结果进行组合。

    由于这个查询过程中server端涉及到index对象,关于index部分的查询参见《rocketMq - index介绍》博文。

rocketMq消息查询_第2张图片
根据key查询-client-1


rocketMq消息查询_第3张图片
根据key查询-client-2


rocketMq消息查询_第4张图片
根据key查询-client-3


rocketMq消息查询_第5张图片
根据key查询-client-4


rocketMq消息查询_第6张图片
根据key查询-server-1


rocketMq消息查询_第7张图片
根据key查询-server-2


根据msgId查询消息

    根据msgId的查询的参数如下图所示,可以看出来核心的参数在于-i的参数,也就是msgId。根据msgId去查询消息的过程中最重要的当然是msgId的参数了。

rocketMq消息查询_第8张图片
根据msgId查询


    根据msgId查询的核心点在于msgId的生成规律,其实msgId是有两个部分组成的,分别是broker的address 和 commitLog的物理偏移量offset,也就是说通过messageId我们就能知道去哪个broker的哪个位置offset去获取消息体。

    关于messageId的消息体,可以见下图中decodeMessageId的类图。

    client端的查询过程和server端的解析查询过程都在下面的代码中贴出来,相信大家应该都能够看得懂的。

rocketMq消息查询_第9张图片
根据msgId查询-client-1


rocketMq消息查询_第10张图片
根据msgId查询-client-2


rocketMq消息查询_第11张图片
根据msgId查询-client-3


rocketMq消息查询_第12张图片
根据msgId查询-server-1


rocketMq消息查询_第13张图片
根据msgId查询-server-2


rocketMq消息查询_第14张图片
根据msgId查询-server-3

你可能感兴趣的:(rocketMq消息查询)