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)sh mqadmin topicList -n 192.168.140.129:9876;192.168.140.128:9876
查看所有的Topic,发现也确实能够找到。
sh mqadmin topicRoute -n 192.168.140.129:9876 -t %DLQ%consumer1
查看该Topic信息,发现perm为2。
修改Topic的perm为6(两台机器都要执行),在128机器上执行如下命令:
1
sh mqadmin updateTopic -b 192.168.159.129:10911 -n 192.168.159.129:9876 -t %DLQ%consumer1 -p 6
129机器上执行如下命令:
1
sh mqadmin updateTopic -b 192.168.159.128:10911 -n 192.168.159.128:9876 -t %DLQ%consumer1 -p 6
查看控制台死信队列。