面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?

简介: 本文讲解如何设计RabbitMQ过期时间设置、死信队列、延时队列,希望对大家有所帮助。

一、前言



RabbitMQ我们经常的使用,但是它有很多高级的特性我们也需要熟练的掌握才能应对现实场景中复杂的业务逻辑。


二、面试



面试官:小奇是吧,我们开始面试吧


我:快点吧,早就饥渴难耐了


面试官:有用过RabbitMQ吗


我:用过


三、RabbitMQ发送消息长时间没人处理过期怎么办?



面试官:RabbitMQ发送消息长时间没人处理过期怎么办?


我:消息长时间没人处理过期了我们为了不影响正常的交换机使用,我们可以将过期的消息放到一个死信交换机中,然后这个交换机绑定一个队列就是死信队列,然后通过一个专门的消费者来处理这些过期的消息


30.png


面试官:只有消息到达过期时间没有被消费会进入死信交换机吗,还有其他的情况吗


我:消息成为死信一共有三种情况。


1:队列消息长度达到限制。

2:消费者拒收消息,并且不将消息放入原来的队列中让他重新发送。

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


面试官:我们怎么定义一个死信交换机和死信队列绑定呢?


我:我们可以通过x-dead-letter-exchange和x-dead-letter-routing-key两个参数来配置好死信交换机的名称,和死信交换机与死信队列之间的路由键名称。


31.png


四、TTL是什么?



面试官:TTL是什么?


我:TTL全称Time To Live(存活时间/过期时间),是mq中用来设置过期时间的。


面试官:我们一般怎么设置过期时间,用哪些方式?


我:我们有两种设置过期时间的方式,一个是对单个消息设置过期时间,一个是对一个队列设置过期时间,这样的话发送到队列中的消息都遵循那个过期时间。


1:队列设置过期时间:x-message-ttl,单位:ms(毫秒),这样的话进入队列的所有消息都遵循这个过期时间。


32.png


2:单个消息设置过期时间:expiration,单位:ms(毫秒),这样的话只有这条消息有过期时间。


33.png


面试官:那如果我即给单条消息设置了时间又给队列设置了时间会怎么样?


我:那样的话根据最短的那个时间来。


五、RabbitMQ延时队列怎么设计?



面试官:那你知道延时队列吗,一般都用来做什么场景下的需求呢?


我:知道,延时队列一般就是发送消息到MQ中后,消费者不要第一时间去处理,比如我们点外卖的时候我们下单成功了,这个时候库存已经减了,但是我们还没有支付,如果我们一直不支付的话,过30分钟订单就自动取消了,然后库存又恢复了。


面试官:那RabbitMQ有延时队列吗,如果让你自己设计一个延时队列怎么设计呢?


我:RabbitMQ中没有提供延时队列的功能,但是我们可以使用TTL+死信队列来实现延时队列的功能。


34.png


面试官:可以呀小伙子,这块掌握的不错


我:还行还行,都是日常的积累


面试官:小伙子真厉害啊,RabbitMQ掌握的非常棒,你面试通过了,明天上岗吧


我:啊,这么急吗,我后面还有好多东西没有讲呢。


面试官:不着急,进来了以后慢慢听你讲,加班让你跟我讲


我:啊。。。这也太难了吧


六、总结



这里关于RabbitMQ还没有整理完毕,文章后面持续更新,建议收藏。


文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。





相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 缓存 NoSQL
RabbitMQ 总结面试
RabbitMQ 总结面试
19 0
|
2月前
|
消息中间件 存储 负载均衡
RocketMQ 面试题及答案整理,最新面试题
RocketMQ 面试题及答案整理,最新面试题
156 4
|
2月前
|
消息中间件 存储 监控
RabbitMQ 面试题及答案整理,最新面试题
RabbitMQ 面试题及答案整理,最新面试题
117 1
|
15天前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
32 2
|
3月前
|
消息中间件 监控 Java
Spring Boot中的RabbitMQ死信队列魔法:从异常到延迟,一网打尽【RabbitMQ实战 一】
Spring Boot中的RabbitMQ死信队列魔法:从异常到延迟,一网打尽【RabbitMQ实战 一】
76 0
|
21天前
|
消息中间件 Java API
RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
25 0
|
28天前
|
消息中间件 Java Maven
springboot 使用注解的方式创建rabbitmq的交换机、路由key、以及监听队列的名称
springboot 使用注解的方式创建rabbitmq的交换机、路由key、以及监听队列的名称
|
1月前
|
消息中间件 存储 NoSQL
rocketmq实现延迟队列思路探讨
本文介绍了两种实现RocketMQ延迟消息的方法。非任意时间延迟可通过在服务器端配置`messageDelayLevel`实现,但需重启服务。任意时间延迟则分为两种策略:一是结合原生逻辑和时间轮,利用RocketMQ的默认延迟等级组合支持任意延迟,但可能丢失1分钟内的数据;二是使用存储介质(如Redis)加时间轮,消息存储和定时发送结合,能处理数据不一致和丢失问题,但涉及更多组件。推荐项目[civism-rocket](https://github.com/civism/civism-rocket)作为参考。
62 1
|
2月前
|
消息中间件 前端开发 算法
【十七】RabbitMQ基础篇(延迟队列和死信队列实战)
【十七】RabbitMQ基础篇(延迟队列和死信队列实战)
44 1
|
3月前
|
消息中间件 监控 数据挖掘
兔子的后院奇遇:深入了解RabbitMQ中的死信队列【RabbitMQ 四】
兔子的后院奇遇:深入了解RabbitMQ中的死信队列【RabbitMQ 四】
51 0