在上篇博客中我们了解了RocketMQ的ACK机制,其中涉及到了消息消费重试,当重试次数达到默认的16次后(可以通过配置文件修改)如果对应的消息还没被成功消费的话,该消息就会投递到DLQ死信队列。
不过,在使用控制台查询死信消息队列的时候会报错,具体如下图
org.apache.rocketmq.client.exception.MQClientException: Can not find Message Queue for this topic, %DLQ%consumer1 See http://rocketmq.apache.org/docs/faq/ for further details.
对应服务器进入相关的目录下,/usr/local/rocketmq/store/consumequeue,发现确实是存在%DLQ%consumer1
我们通过进入到,通过rocketmq的管理命令(先进入/usr/local/rocketmq/bin)查看所有的topic,发现也确实能够找到
sh mqadmin topicList -n 192.168.140.129:9876;192.168.140.128:9876
查看该topic信息,发现perm为2
sh mqadmin topicRoute -n 192.168.140.129:9876 -t %DLQ%consumer1
修改topic的perm为6(两台机器都要执行)
在128机器上执行如下命令:
sh mqadmin updateTopic -b 192.168.159.129:10911 -n 192.168.159.129:9876 -t %DLQ%consumer1 -p 6
129机器上执行如下命令:
sh mqadmin updateTopic -b 192.168.159.128:10911 -n 192.168.159.128:9876 -t %DLQ%consumer1 -p 6
查看控制台死信队列
文章来源: RocketMQ――死信