Java小案例-RocketMQ的11种消息类型,你知道几种?(死信消息)

news2024/11/27 15:34:19

前言

在RocketMQ中,死信消息(Dead-Letter Message)是指那些在正常情况下无法被消费者消费的消息。这些消息会被存储在死信队列(Dead-Letter Queue,简称DLQ)中。

死信消息的特性包括:

  1. 不会再被消费者正常消费:一旦消息被标记为死信消息,它们将不会被正常的消费者消费。
  2. 有效期与正常消息相同,均为3天:死信消息的有效期与正常消息相同,均为3天。这意味着在死信消息产生后的3天内,如果消费者没有处理该消息,它将被自动删除。
  3. 死信队列特性:一个死信队列对应一个Group ID,而不是对应单个消费者实例。如果一个Group ID未产生死信消息,RocketMQ不会为其创建相应的死信队列。一个死信队列包含对应Group ID产生的所有死信消息,不论该消息属于哪个Topic。

使用死信队列可以帮助消费者在处理消息失败时,将失败的消息重新发送到指定的队列,以便进行进一步的处理或分析。

死信消息

死信消息就是指如果消息最终无法被正常消费,那么这条消息就会成为死信消息

RocketMQ中,消息会变成死信消息有两种情况

第一种就是消息重试次数已经达到了最大重试次数

最大重试次数取决于并发消费还是顺序消费

  • 顺序消费,默认最大重试次数就是 Integer.MAX_VALUE,基本上就是无限次重试,所以默认情况下顺序消费的消息几乎不可能成为死信消息

  • 并发消费的话,那么最大重试次数默认就是16次

当然可以通过如下的方法来设置最大重试次数

DefaultMQPushConsumer#setMaxReconsumeTimes

除了上面的情况之外,当在并发消费模式下,你可以在消息消费失败之后手动指定,直接让消息变成死信消息

在并发消费消息的模式下,处理消息的方法有这么一个参数

ConsumeConcurrentlyContext

这个类中有这么一个属性

这个参数值有三种情况,注释也有写:

  • 小于0,那么直接会把消息放到死信队列,成为死信消息。注释写的是=-1,其实只要小于0就可以成为死信消息,不一定非得是-1

  • 0,默认就是0,这个代表消息重试消费,并且重试的时间间隔(也就是延迟级别)由服务端决定,也即是前面重试消息提到的 delayLevel = 3 + 已经重试次数

  • 大于0,此时就表示客户端指定消息重试的时间间隔,是几就代表延迟级别为几,比如设置成1,那么延迟级别就为1

所以,在并发消费模式下,可以通过设置这个参数值为-1,直接让处理失败的消息成为死信消息

当消息成为死信消息之后,消息并不会丢失

RocketMQ会将死信消息保存在死信Topic底下,Topic格式为

%DLQ% + 消费者组名称

跟重试Topic的格式有点像,只是将%RETRY%换成了%DLQ%

如果你想知道有哪些死信消息,只需要订阅这个Topic即可获得

总结

所以总的来说,两种情况会让消息成为死信消息:

  • 消息重试次数超过最大次数,跟消息的处理方式有关,默认情况下顺序处理最大次数是几乎是无限次,也就是几乎不可能成为死信消息;并发处理的情况下,最大重试次数默认就是16次。最大重试次数是可以设置的。

  • 在并发处理的情况下,通过ConsumeConcurrentlyContextdelayLevelWhenNextConsume属性设置成-1,让消息直接变成死信消息

当消息成为死信消息的时候,会被存到%DLQ% + 消费者组名称这个Topic下

用户可以通过这个Topic获取到死信消息,手动干预处理这些消息

联系方式

关于文章中大家有任何疑问可以通过关注公众号《编程乐学》进行留言,同时,公众号还有更多有趣的项目以及关于学习编程的笔记资料大家可以看看,欢迎大家进行留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1320518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

今天面了一个来阿里要求月薪21K的,明显感觉他背了很多面试题.....

最近有朋友去阿里面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

Python基础教程——项目的组织结构:包、模块、类、函数(实例)!

01 几个重要的概念 1.1 包:可以简单的理解为文件夹的概念 注解:包package是一个文件夹(目录),里面包含__init__.py和模块; 1.2 模块:简单的理解为 .py文件 注解:模块module是文件&…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(一)

锁的获取 5.1 锁的强弱 当线程已经持有的锁比新申请的锁更强时,认为已经持有了锁,无需再对申请锁类型加锁。锁的强弱指持有的锁与其他锁的不兼容集合大小,集合相同锁相同,集合更大锁更强,否则无强弱关系。通过锁的兼…

Python---多任务的介绍

1. 提问 利用现学知识能够让两个函数或者方法同时执行吗? 不能,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行,要想实现这种操作就需要使用多任务。 多任务的最大好处是充分利用CPU资源&…

后端相关随机题目记录(1)

目录 后端相关随机题目记录(1) 后端相关随机题目记录(1)Bean的类型以及作用域Bean的生命周期Mysql的底层数据结构RedisHttp和Https区别AOP在项目的应用 自定义注解?请求在spring中的一个流程Nacos与zk的区别SpringMV…

八.创建和管理表

目录 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.2 使用数据库2.3 修改数据库 3. 创建表3.1 创建方式13.2 创建方式23.4 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一个列4.3 重命名一个列4.4 删除一个列 5. 重命名…

Linux - 非root用户使用systemctl管理服务

文章目录 方式一 (推荐)1. 编辑sudoers文件:2. 设置服务文件权限:3. 启动和停止服务: 方式二1. 查看可用服务:2. 选择要配置的服务:3. 创建自定义服务文件:4. 重新加载systemd管理的…

Java 图片文件上传下载处理

Java 图片文件上传下载处理 下载 做这玩意给我恶心坏了 下载 直接访问上传的路径就可以下载图片了。但是我们往往会包一层接口,以流的方式读取 url 的内容然后返回给前端,这么做的优点是: 内网域名转外网域名,做业务校验并且让用…

【C++】new 和 delete

目录 一 引言 二 new 三 delete 四 new和delete操作自定义类型 五 operator new与operator delete函数 六 new和delete的实现原理 1 内置类型 2 自定义类型 1 new的原理 2 delete的原理 3 new T[N]的原理 4 delete[]的原理 七 定位new表达式(placement-new) 八 …

【Android Studio】各个版本下载地址

下载地址: https://developer.android.com/studio/archive?hlzh-cn

HashMap扩容机制详解

目录 1. 扩容的触发条件 2. 扩容的具体步骤 2.1 计算新的容量 2.2 创建新的桶数组 2.3 将元素重新分配到新的桶数组中 2.4 更新容量和阈值 3. 与并发性能的关系 4. 扩容的性能优化 5. 总结 HashMap是Java中常用的数据结构之一,用于存储键值对。在HashMap内…

系列十、存储引擎

一、存储引擎 1.1、概述 大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,它们都有各自的引擎,引擎是它们最为核心的组件。…

RHEL8_Linux_Ansible常用模块的使用

本章主要介绍Ansible中最常见模块的使用 shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a "模块的参数" 对被管理机器执行不同的操作,只需要调用不同的模块…

Pipelined-ADC设计一:序言

现在是2023年12月18日,准备开新帖,设计一个 流水线型 模数转换器( Pipelined-ADC )。记录帖,后续会放在咸鱼。同步记录,谨防盗用。 初定指标:12位50Mhz,采用2.5bit每级结构&#xff…

Goland如何进行Debug断点调试

1. 进入编辑 2. 进行编辑 3. 调试运行 将鼠标移到按钮上,即显示其功能与快捷键 4. 常用调试快捷键 按键说明F7单步执行(进入方法)F8单步执行(不进入方法)F9继续执行

如何实现TensorFlow自定义算子?

在上一篇文章中 Embedding压缩之基于二进制码的Hash Embedding,提供了二进制码的tensorflow算子源码,那就顺便来讲下tensorflow自定义算子的完整实现过程。 前言 制作过程基于tensorflow官方的custom-op仓库以及官网教程,并且在Ubuntu和Mac…

算法:单链表反转

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、问题描述 二、栈解法Stack 三、三指针法 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、问题描述 有个单链表,现…

【Qt之Quick模块】1. 概述及Quick应用程序创建流程

概述 Qt的Quick模块是用于创建现代化、动态和响应式用户界面的工具集。它是基于QML(Qt Meta-Object Language)和JavaScript的。 QML是一种声明性的语言,用于描述用户界面的结构和行为。它使用层叠样式表(CSS)的语法来…

创建型模式之简单工厂模式

一、概述 (1)简单工厂模式并不是一个标准的设计模式,但是它太常用了,简单而又神奇 (2)在简单工厂模式中用于创建实例的方法通常是静态方法,因此又被称为静态工厂方法模式 (3)要点:如果需要什么,只需传入一个正确的参…

鞋帽箱包品牌网站作用如何

鞋帽箱包是市场中很常见的产品,同时需求度又很高,是人们生活所需,除了个别高端品牌外,其它多数产品价格一般都比较低,因此很少有人会在意品牌,只要质量、价格、舒适度、美观好即可。 然而对企业来讲&#…