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

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

文章持续更新

一、前言

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. Spring——初识

    1.1 使用 导包:Spring Web MVC(maven) <!-- https://mvnrepository.com/artifact/org.springframework/sprin ...

  2. 造成panic_oom问题的测试代码

    写一个内核模块,来构造内核模块出现panic oom,主要采用vmalloc函数: #include <linux/module.h> #include <linux/mm.h> ...

  3. 《前端运维》三、Docker--1镜像与容器

    一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ...

  4. CF932G Palindrome Partition(回文自动机)

    CF932G Palindrome Partition(回文自动机) Luogu 题解时间 首先将字符串 $ s[1...n] $ 变成 $ s[1]s[n]s[2]s[n-1]... $ 就变成了求 ...

  5. 羽夏看Win系统内核——内存管理篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  6. EasyExcel完成excel文件的导入导出

    简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...

  7. 「入门篇」初识JVM

    记录于 2022-01-02  17:25:12  GhostFace 1. 什么是JVM? 概念 来自百度百科 JVM是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...

  8. JVM 内存 (堆(heap)、栈(stack)和方法区(method) )

    JVM 内存初学 (堆(heap).栈(stack)和方法区(method) ) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令)2.jv ...

  9. Container 在微服务中的用途是什么?

    容器是管理基于微服务的应用程序以便单独开发和部署它们的好方法.您可以将 微服务封装在容器映像及其依赖项中,然后可以使用它来滚动按需实例的微服务, 而无需任何额外的工作.

  10. Redis ZSet Type

    Redis有序集合的操作命令和对应的api如下: zadd [zset] sco 'value' JedisAPI:public Long zadd(final String key, final d ...