我是靠谱客的博主 温柔砖头,最近开发中收集的这篇文章主要介绍RabbitMQ的高级特性和消息补偿机制,java高级面试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

死信队列,英文缩写:DLX 。Dead Letter Exchange(死信交换机),当消息成为Dead message (死信)后,可以被重新发送到另一个交换机,这个交换机就是DLX。

#####消息成为死信的三种情况:

1.队列消息长度到达限制;

2.消费者拒接消费消息,并且不把消息重新放入原目标队列;

3.原队列存在消息过期设置,消息到达超时时间未被消费;

#####死信队列和死信交换机:

死信队列和死信交换机与正常的队列和交换机一模一样, 没有任何区别 !!

如何实现队列与死信交换机绑定 , 给队列设置如下参数:

  • x-dead-letter-exchange : 设置死信交换机

  • x-dead-letter-routing-key : 设置死信路由key

5. 延迟队列

消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。 例如:

延迟队列是一个很强大的功能 , 但是在RabbitMQ中并没有提供延迟队列功能。

可以使用:TTL(消息过期)+死信队列组合实现延迟队列的效果。

实现流程图如下 :

6. 消费端限流

当系统峰值比较高的时候 , 我们我们可以使用RabbitMQ实现削峰填谷, 让我们系统处理的请求更加平稳

实现步骤

  1. 设置akc机制为手动确认

  2. 配置监听容器

7.RabbitMQ应用问题 (消息补偿机制)

我们通过之前的消息可靠性投递 , ACK 确认机制 , 以及死信队列 , 基本上已经能够保证消息投递成功了 !

为什么还要消息补偿机制呢? 难道消息还会丢失,没错,系统是在一个复杂的环境,不要想的太简单了,虽然以上的三种方案,基本可以保证消息的高可用不丢失的问题,但是作为有追求的程序员来讲,要绝对保证我的系统的稳定性,有一种危机意识。

比如:持久化的消息,保存到硬盘过程中,当前队列节点挂了,存储节点硬盘又坏了,消息丢了,怎么办?

产线网络环境太复杂,所以不知数太多,

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

所以要做消息补偿机制 !

消息补偿机制需要建立在业务数据库和MQ数据库的基础之上 , 当我们发送消息时 , 需要同时将消息数据保存在数据库中, 两者的状态必须记录。 然后通过业务数据库和MQ数据库的对比检查消费是否成功,不成功,进行消息补偿措施,重新发送消息处理

##最后
大家看完有什么不懂的可以在下方留言讨论.
谢谢你的观看。
觉得文章对你有帮助的话记得关注我点个赞支持一下!

435533308)]

##最后
大家看完有什么不懂的可以在下方留言讨论.
谢谢你的观看。
觉得文章对你有帮助的话记得关注我点个赞支持一下!

最后

以上就是温柔砖头为你收集整理的RabbitMQ的高级特性和消息补偿机制,java高级面试的全部内容,希望文章能够帮你解决RabbitMQ的高级特性和消息补偿机制,java高级面试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部