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

前言

在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获取到死信消息,手动干预处理这些消息

联系方式

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何免费搭建私人电影网站(一)

前言:在线看电影经常会出现烦人的广告,为了不浪费时间看广告,有必要做自己的专属网站。 准备工作: 1、申请免费域名(也可以花钱注册域名相对稳定)链接: 申请免费域名方法 2、申请免费主机(也可以…

详解 Jeecg-boot 框架如何配置 elasticsearch

目录 一、下载安装 Elasticsearch 1、 地址:https://www.elastic.co/cn/downloads/elasticsearch 2、下载完成后,解压缩,进入config目录更改配置文件 3、 修改配置完成后,前往bin目录启动el 4、访问:localhost:92…

FreeRTOS202212 ‐ 定时器结构体定义

FreeRTOS202212-定时器结构体 /*-----------------------------------------------------------*/ /* The definition of the timers themselves. */ /*定时器本身的定义*/ typedef struct tmrTimerControl /* The old naming convention is used to prevent breaking kernel a…

分布式事务--TC服务的高可用和异地容灾

1.模拟异地容灾的TC集群 计划启动两台seata的tc服务节点: 节点名称ip地址端口号集群名称seata127.0.0.18091SHseata2127.0.0.18092HZ 之前我们已经启动了一台seata服务,端口是8091,集群名为SH。 现在,将seata目录复制一份&…

音视频学习(二十一)——rtmp收流(tcp方式)

前言 本文主要介绍rtmp协议收流流程,在linux上搭建rtmp服务器,通过自研的rtmp收流库发起取流请求,使用ffmpegqt实现视频流的解码与播放。 关于rtmp协议基础介绍可查看:https://blog.csdn.net/www_dong/article/details/13102607…

《点云处理》平面拟合

前言 在众多点云处理算法中,其中关于平面拟合的算法十分广泛。本篇内容主要是希望总结归纳各类点云平面拟合算法,并且将代码进行梳理保存。 环境: VS2019 PCL1.11.1 1.RANSAC 使用ransac对平面进行拟合是非常常见的用法,PCL…

C语言实现输入一个 N*N 矩阵,并将矩阵转置输出

完整代码&#xff1a; //输入一个 N*N 矩阵&#xff0c;并将矩阵转置输出 #include<stdio.h> #include<stdlib.h>int main(){int n0;printf("请输入矩阵的行数:");scanf("%d",&n);//C语言不允许对数组的大小作动态定义// int arr[n][n];直…

Linux之FTP 服务器

一、FTP服务器匿名账户服务器配置 1、测试是否已安装vsftp服务器&#xff1a; 2、启动vsftp服务器&#xff1a; 3、修改vsftp主配置文件&#xff0c;允许匿名登录 4、重新启动vsftpd服务,禁用防火墙 5、打开FTP服务的数据文件存放目录/var/ftp&#xff0c;复制若干文件到该目…

深度学习环境配置超详细教程【Anaconda+Pycharm+PyTorch(GPU版)+CUDA+cuDNN】

在宇宙的浩瀚中&#xff0c;我们是微不足道的&#xff0c;但我们的思维却可以触及无尽的边界。 目录 关于Anaconda&#xff1a; 关于Pycharm&#xff1a; 关于Pytorch&#xff1a; 关于CUDA&#xff1a; 关于Cudnn&#xff1a; 一、&#x1f30e;前言&#xff1a; 二、&…

深眸科技|轻辙视觉引擎以99.9%视觉检测能力为基准,赋能木材加工

轻辙视觉引擎&#xff1a;轻辙视觉引擎是以低代码为基础&#xff0c;深度学习技术为核心的视觉业务流程编排引擎&#xff0c;用于快速搭建部署复杂视觉检测流程软件方案。 轻辙视觉引擎&#xff5c;轻量级产品实现高效应用 作为深眸科技的核心产品之一&#xff0c;轻辙视觉引…

【Docker光速搞定深度学习环境配置!】

你是否还在用压缩包打包你的代码&#xff0c;然后在新的机器重新安装软件&#xff0c;配置你的环境&#xff0c;才能跑起来&#xff1f; 特别有这样的情况&#xff1a;诶&#xff0c;在我电脑跑的好好的&#xff0c;怎么这里这么多问题&#xff1f; 当项目比较简单的时候&am…

Java Web实现案例 :实现用户登录功能

目录 零、本节学习目标 一、纯JSP方式实现用户登录功能 &#xff08;一&#xff09;实现思路 &#xff08;二&#xff09;实现步骤 1、创建Web项目 2、创建登录页面 3、创建登录处理页面 4、创建登录成功页面 5、创建登录失败页面 6、编辑项目首页 &#xff08;三&…

全同态加密正在改变行业游戏规则?

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 隐私专业人士正在见证隐私技术的一场革命。新的隐私增强技术的出现和成熟是这场革命的一部分&#xff0c;这些技术允许数据使用和…

Python---进程

1. 进程的介绍 在Python程序中&#xff0c;想要实现多任务可以使用进程来完成&#xff0c;进程是实现多任务的一种方式。 2. 进程的概念 一个正在运行的程序或者软件就是一个进程&#xff0c;它是操作系统进行资源分配的基本单位&#xff0c;也就是说每启动一个进程&#xf…

RNN梯度爆炸实验

前情回顾 from torch.utils.data import Dataset import torch.nn as nn import torch.nn.functional as F import os import random import torch from nndl import Accuracy from nndl import RunnerV3 from torch.utils.data import DataLoader import matplotlib.pyplot a…

Html+单页面引入element以及Vue框架引用地址报错(unpkg.com国内无法访问可代替方案)

问题 单页面引入element以及vue 地址报错&#xff0c;请求超时 使用的引用地址是官网上提供&#xff0c;但是没解决问题 一、原因&#xff1a; unpkg也没有幸免于难&#xff0c;也被墙了&#xff0c;unpkg上的相关资源都不能访问&#xff0c;才导致项目资源加载不出。 二、…

微服务——服务异步通讯(MQ高级)

MQ的一些常见问题 消息可靠性 生产者消息确认 返回ack&#xff0c;怎么感觉这么像某个tcp的3次握手。 使用资料提供的案例工程. 在图形化界面创建一个simple.queue的队列&#xff0c;虚拟机要和配置文件里面的一样。 SpringAMQP实现生产者确认 AMQP里面支持多种生产者确认的类…

MySQL job 定时任务

目录 介绍 优点&#xff1a; 缺点&#xff1a; 使用场景&#xff1a; 案例 创建表 -- 创建定时任务 每一分钟插入一条数据 执行结果 -- 查询定时任务 ENABLED--启用 DISABLED--禁用 -- 查询定时任务 -- 启用定时任务 ​-- 禁用定时任务 ​-- 删除定时任务 …

【mybatis】mapper.xml映射文件

目录 一.概述 二.了解mapper.xml文件 namespaceidresultType指定映射文件的路径 一.概述 mapper.xml 是一个 MyBatis 的映射文件&#xff0c;用于定义 SQL 语句和结果映射。它是一个 XML 文件&#xff0c;通常放置在项目的资源目录下。 随着mybatis框架的发展&#xff0c;myb…

Spring IOC 原理(二)

Spring IOC 原理 概念 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系&#xff0c;利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上&#xff0c;还提供了 Bean 实例缓存、生命周期管理、 Bean 实…