解决RocketMQ死信队列不消费问题_org.apache.rocketmq.client.exception.mqclientexcep-程序员宅基地

技术标签: rocketmq  stream  dlq  # RocketMQ  

分享知识 传递快乐

因为需要处理死信队列问 RocketMQ 官方死信队列配置,将死信队列配置到服务中,代码配置啥的都没问题,可就是不消费。经过多从磨难终于抛开云雾见明月,下面记录一下。

pom.xml

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>

yml

spring:
  cloud:
    ### Spring Cloud Stream 配置项,对应 BindingServiceProperties 类
    stream:
      ### Binding 配置项,对应 BindingProperties Map
      bindings:
        # 事务消费者
        tx-input:
          destination: tx-topic
          contentType: application/json
          group: tx-group
          consumer:
            #多线程
            concurrency: 20
            #重试1次
            maxAttempts: 2
        # 死信队列配置
        dlq-input:
          destination: '%DLQ%${spring.cloud.stream.bindings.tx-input.group}'
          contentType: application/json
          group: dlq-group
          consumer:
            concurrency: 20
      ### Spring Cloud Stream RocketMQ 配置项
      rocketmq:
        binder:
          name-server: 172.16.1.100:9876 # RocketMQ 服务器地址
        bindings:
          tx-input:
            consumer:
              # 异步消费消息模式下消费失败重试策略,默认为 0,重试失败直接进入死信队列
              delayLevelWhenNextConsume: -1


java

@StreamListener(ConsumeConfig.ConsumeSink.DLQ_INPUT)
void dlqInput(Message message);


在使用控制台查询死信消息队列的时候会报错:

org.apache.rocketmq.client.exception.MQClientException: Can not find Message Queue for this topic, %DLQ%tx-group See http://rocketmq.apache.org/docs/faq/ for further details.


第一次遇到这种问题TMD无从下手,为了解决问题,不停的查阅资料、尝试,最后终于在 github 上的 RocketMQ 官方评论中知道上面的问题,竟然是是 RocketMQ 权限问题。虽然知道是权限问题了,接下来怎么改?改成什么?都是一无所知。有陷入沉思......

通过 RocketMQ 的管理命令查看所有的 topic,%DLQ%tx-group 确实是存在,那么为啥不消费呢?


在查看该 topic 信息时,发现 perm 为 2,

bin/mqadmin topicRoute -n 172.16.1.100:9876 -t %DLQ%tx-group

当看到这里时终于看见的黎明的太阳,于是修改 topic 的 perm 为 6:

bin/mqadmin updateTopic -b 172.16.1.100:10911 -n 172.16.1.100:9876 -t %DLQ%tx-group -p 6

 当消费者再次连续达到指定失败次数时,就会走到死信队列中消费。


RocketMQ权限

  • PermName.PERM_INHERIT:Topic继承,value:1
  • PermName.PERM_READ:Topic读,value:4
  • PermName.PERM_WRITE:Topic写,value:2

perm=7 #可继承、读、写

perm=4 #可读

perm=2 #可写

RocketMQ的Topic自动新建是通过继承TBW102实现的,如果把TBW102的perm改为6,将不会自动创建Topic。

疑惑:

虽然上述配置解决了死信队列不消费问题,但每次都要通过命令修改权限来达到死信队列消费。

这种方式必须要进入服务器进行修改,才可以生效,还是比较麻烦的,不知道有没有通过代码或配置的方式达到相同的操作,如果有其他解决方案或思路的还请留言告诉小编,让小编也能学习一下。
 

—————————
如有不足请留言指正
相互学习,共同进步

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xhaimail/article/details/120038909

智能推荐

Odoo12取消界面导入导出功能_odoo12隐藏导入按钮-程序员宅基地

文章浏览阅读2.6k次。在Odoo12中系统中有自带的导入功能,当个性化开发之后需要隐藏系统的导入功能以避免混乱,以采购为例:做法如下:点开设置界面,下拉找到 “导入 &amp; 导出” 然后取消勾选:会弹出警告 禁用此选项也会卸载以下模块:基础导入。然后点击保存之后会卸载系统的 基础导入模块,之后回到采购界面导入按钮就会消失: ..._odoo12隐藏导入按钮

javaweb基于Struts2开发数据上传在线网盘系统 源码-程序员宅基地

文章浏览阅读321次,点赞6次,收藏8次。基于Struts开发数据上传在线网盘系统:(毕业设计/课程设计)开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+SQLSERVER数据库运行效果图:基于Struts开发数据上传在线网盘系统:(毕业设计/课程设计)开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+SQLSERVER数据库基于Struts开发数据上传在线网盘系统:(毕业设计/课程设计)开发环境: Windows操作系统。

hbase应用场景_企业hbase应用场景-程序员宅基地

文章浏览阅读169次。搜索引擎应用:存储,索引快速查找增量数据存储:增量监控数据,增量用户交互数据,增量遥感数据,增量广告点击数据。用户内容服务:内容推荐引擎系统,用户模型服务(经过hbase处理过的内容并非直接作用于用户,可用来丰富与用户的交互,并不断产生新的数据来优化)。实时消息系统构建:处理数据如facebook,处理较小的临时数据集,是经常变化的。处理不断增加的数据集,是很少被访问的。参考:《HBase..._企业hbase应用场景

php xls导出文件到本地_php导出中文内容excel文件类实例-程序员宅基地

文章浏览阅读50次。本文实例讲述了php导出中文内容excel文件类。分享给大家供大家参考。具体如下:class toExcel{public $link = null;function __construct(){}/**************************************************************************** $mapping:数组格式头信息$map=ar..._php导出中文文件

Java 中如何转 u4f60\u597d\u554a\uff0c\u8fd9\u91cc\u662f\u4e2d\u56fd 类似的Unicode_java \uff0c\u547d\-程序员宅基地

文章浏览阅读2k次。解决方案,一行代码搞定,无需三方工具String rst="{\u4f60\u597d\u554a\uff0c\u8fd9\u91cc\u662f\u4e2d\u56fd}";System.out.println(rst);_java \uff0c\u547d\

Unicode汉字编码范围\u4E00-\u9FA5_u9fff 和u9fa5区别-程序员宅基地

文章浏览阅读2.2w次,点赞2次,收藏13次。Unicode世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,_u9fff 和u9fa5区别

随便推点

IT外企那点儿事(23): 离弦没有回头箭-程序员宅基地

文章浏览阅读581次。这一章,我们最后来谈一谈离职的那些事情。根据不同的人跳槽的原因不同,离职的时候,大家会有不同的表现:低调淡出式:这种方式离职的人往往在原来的工作中,无论是上司关系,团队氛围,工作内容,公司制度,绩效评价等等方面都是相对比较满意的,因为猎头或是朋友的介绍,跳到一个机会更好,薪水更高,职位更高的地方去。由于原来的公司和上司待他不薄,所以他不希望因为自己的跳槽给团队带来波动,给上司带来不

前端,HBuilder第一天_用hbuilder做流量调查表-程序员宅基地

文章浏览阅读310次。前端代码基础测试<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>html</title> </head> <body> hello html~ hello html~ <br/> hello &nbsp; html~ </body></html><._用hbuilder做流量调查表

Html —— 表白弹幕 特效(效果+代码)-程序员宅基地

文章浏览阅读975次,点赞21次,收藏15次。核心竞争力,怎么才能提高呢?成年人想要改变生活,逆转状态?那就开始学习吧~万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

连接Mongodb数据库的步骤以及注意事项_如何连接mongodb数据库-程序员宅基地

文章浏览阅读3.8k次。连接进入Mongodb数据库的步骤以及一些注意事项_如何连接mongodb数据库

View视图的根视图到底是什么_decorview是phonewindow的根视图-程序员宅基地

文章浏览阅读3.4k次。如上图所示,几乎所有的Activity的视图树都是从PhoneWindow$DecorView——>LinearLayout——>FrameLayout(id/content)开始的,接下来的内容才是我们在layout中定义的视图的开始,现在从源码中看看这样的结构是怎么形成的。Activity视图加载总是从setContentView()开始的: public void setCon_decorview是phonewindow的根视图

CentOS配置本地yum源,网络源以及优先级-程序员宅基地

文章浏览阅读520次。1.用Centos镜像搭建本地yum源在配置网络yum之前我们先卸载旧的yum,并下载CentOS的对应软件包安装,这一步配置yum源都要操作[root@localhost tools]# rpm -aq|grep yumyum-metadata-parser-1.1.2-16.el6.x86_64yum-rhn-plugin-0.9.1-58.el6.noarchyum-3.2.29-..._centos 源 顺序

推荐文章

热门文章

相关标签