MQ死信对列

面试题:你们是如何保证消息不丢失的?

1、什么是死信

死信就是消息在特定场景下的一种表现形式,这些场景包括:

1. 消息被拒绝访问,即消费者返回 basicNack 的信号时 或者拒绝basicReject

2. 消费者发生异常,超过重试次数 。 (其实spring框架调用的就是 basicNack

3. 消息的Expiration 过期时长或队列TTL过期时间。.ttl(20*1000) 进入的是 先进业务队列的数据.业务队列中先进入队列的信息会阻塞门口,不让过期的信息进入死信队列直到自己过期才放行,后期用rabbitmq的延时队列插件,实现同一个队列中有多个不同超时时间的消息,并按时间超时顺序出队

4. 消息队列达到最大容量 .maxLength(5).先进业务队列的消息由死信交换机进入死信队列

 述场景经常产生死信,即消息在这些场景中时,被称为死信

2、什么是死信队列

死信队列就是用于储存死信的消息队列,在死信队列中,有且只有死信构成,不会存在其余类型的消息。

死信队列在 RabbitMQ 中并不会单独存在,往往死信队列都会绑定这一个普通的业务消息队列,当所绑定的消息队列中,有消息变成死信了,那么这个消息就会重新被交换机路由到指定的死信队列中去,我们可以通过对这个死信队列进行监听,从而手动的去对这一消息进行补偿。 人工干预

 

 3、那么,我们到底如何来使用死信队列呢? 

只需要在声明业务队列的时候,绑定指定的死信交换机和RoutingKey即可。

死信交换机一般用直连交换机,将死信路由到指定的死信队列;业务则用广播交换机 

消息队列达到最大容量;队列TTL过期时间


@Configuration
public class OrderingOKConsumer {//死信交换机用直连@Beanpublic DirectExchange deadExchange() {return ExchangeBuilder.directExchange("ordering_ok_dlx").durable(true).build();}
//私信队列和正常没啥区别@Beanpublic Queue deadQueue() {return QueueBuilder.durable("ordering_ok_wms_dl").build();}
//死绑@Beanpublic Binding bindingDead() {return BindingBuilder.bind(deadQueue()).to(deadExchange()).with("ordering_ok_wms_dl");}
//业务交换机用广播@Beanpublic FanoutExchange exchange5() {return ExchangeBuilder.fanoutExchange("ordering_ok").durable(true).build();}
//业务队列,要和死信交换机和队列绑定@Beanpublic Queue queue5() {return QueueBuilder.durable("ordering_ok_wms").maxLength(3).deadLetterExchange("ordering_ok_dlx").deadLetterRoutingKey("ordering_ok_wms_dl").ttl(10000)//设置队列过期时间.build();}@Beanpublic Binding binding5() {return BindingBuilder.bind(queue5()).to(exchange5());}//@RabbitListener(queues = "ordering_ok_wms")public void consumer(OrderingOk msg) {System.out.println("ordering_ok_wms收到消息:" + msg);int i = 1 / 0;}
}

 消息的Expiration 过期时长

@Service
public class OrderingOkProvider {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(OrderingOk msg) {rabbitTemplate.convertAndSend("ordering_ok","",msg,message -> {Long id=msg.getId();int expire = 0;switch (id.intValue()){case 1:expire = 50*1000;break;case 2:expire = 40*1000;break;case 3:expire = 30*1000;break;case 4:expire = 20*1000;break;case 5:expire = 10*1000;break;}// message.getMessageProperties().setExpiration(expire+"");return message;});}
}

4. 自动应答死信配置

#-------------MQ 高级配置---------

#预抓取数量

spring.rabbitmq.listener.simple.prefetch=250

#设置消费者手动应答模式

spring.rabbitmq.listener.simple.acknowledge-mode = auto

#开启自动应答重试机制

spring.rabbitmq.listener.simple.retry.enabled=true

#默认重试3次

spring.rabbitmq.listener.simple.retry.max-attempts=3

#重试间隔时间 单位ms

spring.rabbitmq.listener.simple.retry.initial-interval=1000ms

#时间间隔倍数,默认是1倍

spring.rabbitmq.listener.simple.retry.multiplier=2

#最大间隔时间

spring.rabbitmq.listener.simple.retry.max-interval=5000ms

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保存数据至后台表

保存数据至后台表-供大数据平台使用-JOB程序 *&---------------------------------------------------------------------* *&程序名称 :ZBD_JOB_001 *&程序描述 : 保存数据至后台表-供大数据平台使用-JOB程序 *…

数据结构:线性结构之顺序表、链表篇

数据结构:顺序表、链表篇 线性表一、顺序表(一)顺序表的结构定义(二)顺序表的功能实现1、初始化2、销毁3、扩容4、插入5、删除 (三)顺序表例题分析1、删除有序数组中的重复项2、合并两个有序数组…

大数据技术——DolphinScheduler的集群部署

目录 第1章 DolphinScheduler简介 1.1 DolphinScheduler概述 1.2 DolphinScheduler核心架构 第2章 DolphinScheduler部署说明 2.1 软硬件环境要求 2.1.1 操作系统版本要求 2.1.2 服务器硬件要求 2.2 部署模式 2.2.1 单机模式 2.2.2 伪集群模式 2.2.3 集群模式 第3章…

进程间通信—无名管道

gg shiftg快速对齐 加锁顺序问题时,如果解锁了,两个同时申请抢锁,谁抢到了运行谁,循环迭代时释放锁也是同时申请锁,循环部分如果没抢到锁就进入循环等待 总结: IPC 进程间通信 interprocess communicate //signal…

免费简单的制作3D卡通建模——Fuse软件和Readyplayer的使用介绍

最终效果 文章目录 最终效果一、使用Fuse软件去Steam下载安装捏人选择身体部位自定义人物细节参数换装贴图修改导出OBJ文件即可 二、使用ReadyplayerReadyplayer官网地址选择从模板开始,或者拍照选择图片进行捏脸将模型导入Unity通过Readyplayer官方插件导入模型通过…

UI设计:蒸汽波风格页面有啥特征,应用哪些场景?

一、什么是蒸汽波风格 蒸汽波风格(Steampunk)是一种将19世纪工业时代的技术和想象力与未来科技相结合的艺术和文化流派。它通常描绘了一个类似维多利亚时代的世界,其中蒸汽动力是主要能源,机械装置和复杂的齿轮系统被广泛应用。 …

若依服务器上云部署

准备条件:安装好mysql和redis并配置好密码。 1.安装JDK,我这里使用的是1.8 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/…

idea 对于mybatis-plus框架JRebelX和XRebel热启动失效问题

1.mybatis-plus不需要使用热启动插件,修改完代码后,直接重新编译一下即可,不需要重启 2.如果是mapper.xml文件,则直接安装JRebel MybatisPlus extension 插件即可完成mapper.xml静态文件更改进行热加载

XSS小游戏(题目+解析)DOM破坏!!!

文章目录 一、Ma Spaghet!二、Jefff三、Ugandan Knuckles四、Ricardo Milos五、Ah Thats Hawt六、Ligma七、Mafia方法一:可以用匿名函数来试试方法二:利用toString方法方法三:利用location和hash切片slice 八、Ok, Boomer九、svg十、DOM破坏十…

阿里巴巴Arthas详解

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。Arthas 官方文档十分详细,详见:arthas Arthas使用场景 得益于 Arthas 强大且丰富的功能&#x…

基于 Appium 的 App 爬取实战

除了运行 Appium 的基本条件外,还要一个日志输出库 安装: pip install loguru 思路分析 首先我们观察一下整个 app5 的交互流程,其首页分条显示了电影数据, 每个电影条目都包括封面,标题, 类别和评分 4…

EMQX Platform Snowflake:构建可再生分布式能源的智慧未来

引言 可再生能源如风力和太阳能发电,具有低成本和环保的特性,是未来能源供应的主要方向。然而,这类发电方式存在供应分散、设备数量多、地区分布广等特点。再加上不同地区的季节和天气变化,不确定性极大。 随着社会用电需求的持…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——5.string(模拟实现)

1.存储结构 namespace zone {class string{public:private: //设置私有,不允许随便访问底层数据char* _str; //字符串存储空间首地址指针size_t _size; //当前字符数量size_t _capaicty; //可用容量static const size_t npos;}const size_t string::nops -1;//在类…

【C++STL详解(十一)】map/set/multimap/multiset的介绍与使用

目录 一、关联式容器 二、键值对 三、set 介绍 简单使用 1.构造 2.相关迭代器 3.容量 4.修改 四、multiset 五、map 介绍 使用 1.定义的方式 2.迭代器相关 3.容量与operator【】(重点) 4.修改 小总结: 六、multimap 一、关联式容器 在CSTL中…

硬件面试经典 100 题(51~70 题)

51、请列举您知道的覆铜板厂家。 生益、建滔。 52、示波器铭牌一般都会标识两个参数,比如泰克 TDS1002B 示波器标识的 60MHz 和 1GS/s,请解释这两个参数的含义。 60MHz 是指示波器的带宽,即正常可以测量 60MHz 频率以下的信号。 1GS/s 是指示…

MySQL进阶难度知识点分析

以下为本人在阅读《MySQL是怎样运行的:从根儿上理解MySQL》这本书时对一些难度和重点的笔记,主要用于个人学习使用,内容可能存在出入,望理性食用~ 1. sql执行流程 一条sql的执行流程大致可分为客户端获取与数据库服务器的连接&am…

【JavaEE精炼宝库】网络原理基础——UDP详解

文章目录 一、应用层二、传输层2.1 端口号:2.2 UDP 协议:2.2.1 UDP 协议端格式:2.2.2 UDP 存在的问题: 2.3 UDP 特点:2.4 基于 UDP 的应用层协议: 一、应用层 我们 Java 程序员在日常开发中,最…

【排序篇】插入排序与选择排序

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1. 排序的概念及其应用1.1 排序的概念1.2 排序的应用场景1.3 常见的排序算法 2.常…

Vue3+vite+ts 项目使用mockjs

1、安装mockjs npm i mockjs 2、安装vite-plugin-mock npm i vite-plugin-mock -D 3、安装axios npm i axios 4.在src目录下创建mock文件夹,在文件夹内创建login.ts等文件,并在文件夹内放置以下内容(注:URL要和真实请求地址保持一致&am…

走向绿色:能源新选择,未来更美好

当前,全球范围内可再生能源正经历着从辅助能源向核心能源的深刻转型,绿色能源日益渗透至居住、出行、日常应用等多个领域,深刻影响着我们的生活方式,使我们能够更加充分地体验清洁能源所带来的优质生活。 一、绿色能源与“住” …