RocketMq是一个纯Java、分布式、队列模型的的开源的消息中间件,但是目前相关的资料较少,所以出现了问题很难找到解决方案。
1、MQ 消息生产:http://blog.csdn.net/luckyzhoustar/article/details/51286559
2、MQ 消息订阅:http://blog.csdn.net/luckyzhoustar/article/details/51286560
在使用过程中,需要用查询生产的消息,可以根据Key和Id查询消息。
一、根据key查询消息
1、运维命令
文档:
指令 | queryMsgByKey | 类路径 | com.alibaba.rocketmq.tools.command.message.QueryMsgByKeySubCommand | ||
参数 | 是否必填 | 说明 | |||
-f | 否 | 被查询消息的截止时间 | |||
-k | 是 | msgKey | |||
-t | 是 | Topic名称 | |||
-h | 否 | 打印帮助 | |||
-n | 是 | nameserve服务地址列表,格式ip:port;ip:port;... | |||
举例 | 查询Topic= ZTEExample下key= SimpleTest-1的消息,nameserve地址为10.45.47.168:9876 | ||||
sh mqadmin queryMsgByKey -n 10.45.47.168:9876 -t ZTEExample -k SimpleTest-1 打印内容: #Message ID #QID #Offset 0A2D2FA800002A9F0000000000000000 0 0 |
2、实例:
3、结果:
可以得到消息的这个key下面所有的msgId,然后可以通过查询到的id在定位到具体消息
二、根据msgId查询消息
1、文档:
指令 | queryMsgById | 类路径 | com.alibaba.rocketmq.tools.command.message.QueryMsgByIdSubCommand | ||
参数 | 是否必填 | 说明 | |||
-i | 是 | msgId | |||
-h | 否 | 打印帮助 | |||
-n | 是 | nameserve服务地址列表,格式ip:port;ip:port;... | |||
举例 | 查询msgId= 0A2D2FA800002A9F0000000000000000的消息,nameserve地址为10.45.47.168:9876 | ||||
sh mqadmin queryMsgById –n 10.45.47.168:9876 –i 0A2D2FA800002A9F0000000000000000 打印内容: Topic: ZTEExample Tags: [SimpleTest] Keys: [SimpleTest-1] Queue ID: 0 Queue Offset: 0 CommitLog Offset: 0 Born Timestamp: 2014-02-26 14:49:10,875 Store Timestamp: 2014-02-26 14:48:44,840 Born Host: 10.45.46.229:4231 Store Host: 10.45.47.168:10911 System Flag: 0 Properties: {TAGS=SimpleTest, KEYS=SimpleTest-1, WAIT=true} Message Body Path: /tmp/rocketmq/msgbodys/0A2D2FA800002A9F0000000000000000 |
2、实例:
3、结果:
通过ID查询到消息,可以看到消息的存放路径,和该消息的相关信息,已经该消息的消费状态。
通过API 方式调用查询消息。通过此功能可以在源码的基础上,自己封装成页面,查询每条消息的生命周期。
一、根据Key查询消息
DefaultMQProducer 类中有提供 queryMessage 方法,
但是方法中需要的参数,maxNum,bengin,end 在没有注释的情况下,并不知道具体传什么参数,在阅读源码后,
begin和end 需要的是时间戳格式,所以确认传入的应该是查询时间。同时通过key可以查询多个msgId,maxNum应该的查询个数。
尝试当前时间前后两小时 该KEY下面的100条数据。
当时返回结果为null。失败。。。。
github,oschina,官方文档在查询无果之后,最后上了阿里云,查询和rocketMQ收费版的ONS文档,
在查询消息的文档中发现很重要的一句话
贴上原文地址:https://help.aliyun.com/document_detail/29540.html?spm=5176.doc29536.6.107.HVVHro
查询数量不能超过64条,修改maxNum为10.
成功查询到刚刚丢进去的消息。。。
根据ID查询相对简单,
调用此方法可以直接查询到。。。