rocketMq消息查询

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

概述

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


根据key查询消息

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

img_de95f83f72c5785d6ea1081a60623d56.png
根据key查询

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

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

img_443672887d3c02f5103c7d9ea5c505e0.png
根据key查询-client-1


img_89a20c019ffa36c91da23c816440c42a.png
根据key查询-client-2


img_39ce7692c45cea72a692fe0d331a8142.png
根据key查询-client-3


img_e4c4a50a92d138206e93b61ac6e0c8ef.png
根据key查询-client-4


img_21de20269207ba796b23cb82a5499b74.png
根据key查询-server-1


img_5d8f833c572efb2e10934bee7999ae6c.png
根据key查询-server-2


根据msgId查询消息

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

img_75ba8e3cfc5a18ca40b126bed9c6f877.png
根据msgId查询


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

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

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

img_364c8b22b0884079ac85dabb05eb5d15.png
根据msgId查询-client-1


img_2d64cbdbaa012d52e0bb3a1137cee349.png
根据msgId查询-client-2


img_187dcd53a1b59142fb16964ed200351a.png
根据msgId查询-client-3


img_4ef8dfb97e068a7a3f5b39fd2fc2921e.png
根据msgId查询-server-1


img_729bce5da3b17b3379e04db73eab9485.png
根据msgId查询-server-2


img_cd5d74459f05998694a1f6d33d044586.png
根据msgId查询-server-3
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 算法 Java
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
818 1
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
|
8月前
|
消息中间件 Apache C语言
消息队列 MQ产品使用合集之在Cluster部署模式下,使用dashboard无法查询到消费组信息,一般是什么导致的
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
124 0
|
8月前
|
消息中间件 网络性能优化
消息队列 MQ产品使用合集之通过MQTT控制台查询不到设备轨迹或消息轨迹是什么原因
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
9月前
|
物联网 API 网络性能优化
MQTT常见问题之没有权限查询如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
9月前
|
消息中间件 物联网 RocketMQ
MQTT常见问题之RocketMQ到MQTT的消息轨迹查询失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
9月前
|
物联网 Serverless
MQTT常见问题之通过mqtt控制台查询不到设备轨迹如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
消息中间件 uml RocketMQ
3 张图带你彻底理解 RocketMQ 事务消息
3 张图带你彻底理解 RocketMQ 事务消息
67828 2
3 张图带你彻底理解 RocketMQ 事务消息
|
消息中间件 Java uml
5张图带你理解 RocketMQ 顺序消息实现机制
5张图带你理解 RocketMQ 顺序消息实现机制
737 1
5张图带你理解 RocketMQ 顺序消息实现机制
|
消息中间件 缓存 算法
阿里二面:RocketMQ 消息积压了,增加消费者有用吗?
阿里二面:RocketMQ 消息积压了,增加消费者有用吗?
285 0
阿里二面:RocketMQ 消息积压了,增加消费者有用吗?
|
消息中间件 缓存 数据库
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
451 0
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息