rocketMQ 消息查询(id,key) 运维命令以及java API的用法

[python]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">   </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">MQ相关介绍:http://blog.csdn.net/luckyzhoustar/article/details/51286554</span>  


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= ZTEExamplekey= 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、实例:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. sh mqadmin queryMsgByKey -n 10.10.4.184:9876 -t SCANRECORD -k b4d83f23-36fe-4890-946c-a2dcccc67572  
3、结果:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0  
  2. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0  
  3. #Message ID                                        #QID                                  #Offset  
  4. 0A0A04B800002A9F0000005C597BACE1                      1                                 66788391  

可以得到消息的这个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、实例:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. [root@master bin]# sh mqadmin queryMsgById -n 10.10.4.184:9876 -i 0A0A04B800002A9F0000005C597BACE1  

3、结果:

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. ava HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0  
  2. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0  
  3. Topic:               SCANRECORD  
  4. Tags:                [1]  
  5. Keys:                [b4d83f23-36fe-4890-946c-a2dcccc67572]  
  6. Queue ID:            1  
  7. Queue Offset:        66788391  
  8. CommitLog Offset:    396638268641  
  9. Reconsume Times:     0  
  10. Born Timestamp:      2016-08-18 20:18:51,648  
  11. Store Timestamp:     2016-08-18 20:19:15,456  
  12. Born Host:           10.10.42.177:62899  
  13. Store Host:          10.10.4.184:10911  
  14. System Flag:         0  
  15. Properties:          {KEYS=b4d83f23-36fe-4890-946c-a2dcccc67572, WAIT=trueTAGS=1}  
  16. Message Body Path:   /tmp/rocketmq/msgbodys/0A0A04B800002A9F0000005C597BACE1  
  17.   
  18.   
  19.   
  20. MessageTrack [consumerGroup=WOBUXINHAIYOUtrackType=UNKNOW_EXCEPTIONexceptionDesc=com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 206  DESC: the consumer group[WOBUXINHAIYOU] not online  
  21. For more information, please visit the url, https://github.com/alibaba/RocketMQ/issues/48, com.alibaba.rocketmq.client.impl.MQClientAPIImpl.getConsumerConnectionList(MQClientAPIImpl.java:1189)]  

通过ID查询到消息,可以看到消息的存放路径,和该消息的相关信息,已经该消息的消费状态。



通过API 方式调用查询消息。通过此功能可以在源码的基础上,自己封装成页面,查询每条消息的生命周期。



一、根据Key查询消息

DefaultMQProducer 类中有提供 queryMessage 方法,

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2.    public QueryResult queryMessage(String topic, String key, int maxNum, long begin, long end)  
  3.            throws MQClientException, InterruptedException {  
  4.        return this.defaultMQProducerImpl.queryMessage(topic, key, maxNum, begin, end);  
  5.    }  

但是方法中需要的参数,maxNum,bengin,end 在没有注释的情况下,并不知道具体传什么参数,在阅读源码后,





begin和end 需要的是时间戳格式,所以确认传入的应该是查询时间。同时通过key可以查询多个msgId,maxNum应该的查询个数。

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. QueryResult res =mqProducerBiz.queryMessage(topic, key, 100,   
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="white-space:pre">        </span>(new Date().getTime()-(2*60*60*1000)),(new Date().getTime()+(2*60*60*1000)));  

尝试当前时间前后两小时 该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查询相对简单,

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2.   public MessageExt viewMessage(String msgId) throws RemotingException, MQBrokerException,  
  3.           InterruptedException, MQClientException {  
  4.       return this.defaultMQProducerImpl.viewMessage(msgId);  
  5.   }  

调用此方法可以直接查询到。。。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值