哈喽!大家好,我是小奇,一位不靠谱的程序员

小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧

文章持续更新

一、前言

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

二、面试

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

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

面试官:有用过RabbitMQ吗

我:用过

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

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

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

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

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

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

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

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

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

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

四、TTL是什么?

面试官:TTL是什么?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

六、总结

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

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

如果觉得我的文章还不错的话就点个赞吧

面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?的更多相关文章

  1. rabbitMq 学习笔记(二) 备份交换器,过期时间,死信队列,死信队列

    备份交换器 备份交换器,英文名称为 Altemate Exchange,简称庙,或者更直白地称之为"备胎交换器". 生产者在发送消息的时候如果不设置 mandatory 参数, 那 ...

  2. ActiveMQ队列消息过期时间设置和自动清除解决方案

    版本 apache-activemq-5.15.3 1.消息过期设置 参数详情 1)message过期则客户端不能接收 2)ttlCeiling:表示过期时间上限(程序写的过期时间不能超过此时间,超过 ...

  3. [ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?

    今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个 ...

  4. 为什么一段时间后网站后台自动退出 php中session过期时间设置

    修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概述:每一次php请求,会有1/100的概率(默认值)触发 ...

  5. redis基本操作和 过期时间设置以及持久化方案

    Redis是NOSQL阵营中的一种数据库,主要用于存储缓存 五大数据类型:字符串(String).散列(hash).列表(list).集合(set).有序集合(SortedSett .zset) St ...

  6. srpingboot2 session过期时间设置

    springboot2 设置session过期的配置 server.servlet.session.timeout = 1800 而不再是 server.session.timeout=1800

  7. jquery.cookie.js存与取以及过期时间设置

    $(function(){ $(".active_out .abtn").click(function(){ $(this).parents(".active_out&q ...

  8. Cookie的过期时间设置

    https://pan.baidu.com/s/1ibUQhLt6ZgVyhVM6mnrtHg 密码:9psc

  9. redis过期时间设置

    方法一: $redis->setex(,'huahua'); 方法二: $redis->set('name','huahua'); $redis->expire('name',3);

随机推荐

  1. 基于WebSocket的简易聊天室

    用的是Flash + WebSocket 哦~ Flask 之 WebSocket 一.项目结构: 二.导入模块 pip3 install gevent-websocket 三.先来看一个一对一聊天的 ...

  2. [SPDK/NVMe存储技术分析]012 - 用户态ibv_post_send()源码分析

    OFA定义了一组标准的Verbs,并提供了一个标准库libibvers.在用户态实现NVMe over RDMA的Host(i.e. Initiator)和Target, 少不了要跟OFA定义的Ver ...

  3. url斜杠问题——重定向

    path('hello',hello), path('hello/',hello), 有什么区别? 没有斜杠:只能访问hello 有斜杠:可以访问hello和hello/ 分析有斜杠的: hello- ...

  4. 垃圾收集器G1和CMS ,以及老年代和新生代的比例设置

    首先 1.G1是包括年轻代和年老代的GC 2.CMS是年老代GC 3.二者在某些时候都需要FullGC(serial old GC)的辅助 ###CMS收集器:CMS(ConCurrent Mark ...

  5. java动态代理--代理接口无实现类

    转载:https://blog.csdn.net/weixin_45674354/article/details/103246715 1.接口定义: package cn.proxy; public ...

  6. 解释WEB 模块?

    Spring的WEB模块是构建在application context 模块基础之上,提供一个适合web应用的上下文.这个模块也包括支持多种面向web的任务,如透明地处理多个文件上传请求和程序级请求参 ...

  7. springboot常用的starter有哪些?

    spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持 spring-boot-starter-data-jpa 数据库支持 spring-boot ...

  8. SpringBoot项目意外出现 循环依赖和注入的对象意外是Null的问题 Requested bean is currently in creation: Is there an unresolvable circular reference? 或 nested exception is java.lang.NullPointerException

    1.Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ...

  9. Mybatis Plus使用租户过滤无效解决方案

    异常内容: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Pe ...

  10. JDBC的全称是什么?

    Java DataBase Connectivity,java数据库连接