哈喽!你们好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,若是你以为经过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新程序员
1、前言
RabbitMQ咱们常常的使用,可是它有不少高级的特性咱们也须要熟练的掌握才能应对现实场景中复杂的业务逻辑。面试
2、面试
面试官:小奇是吧,咱们开始面试吧设计
我:快点吧,早就饥渴难耐了blog
面试官:有用过RabbitMQ吗rabbitmq
我:用过队列
3、RabbitMQ发送消息长时间没人处理过时怎么办?
面试官:RabbitMQ发送消息长时间没人处理过时怎么办?图片
我:消息长时间没人处理过时了咱们为了避免影响正常的交换机使用,咱们能够将过时的消息放到一个死信交换机中,而后这个交换机绑定一个队列就是死信队列,而后经过一个专门的消费者来处理这些过时的消息路由
面试官:只有消息到达过时时间没有被消费会进入死信交换机吗,还有其余的状况吗it
我:消息成为死信一共有三种状况。
1:队列消息长度达到限制。
2:消费者拒收消息,而且不将消息放入原来的队列中让他从新发送。
3:原队列存在消息过时设置,消息达到超时时间未被消费。io
面试官:咱们怎么定义一个死信交换机和死信队列绑定呢?
我:咱们能够经过x-dead-letter-exchange和x-dead-letter-routing-key两个参数来配置好死信交换机的名称,和死信交换机与死信队列之间的路由键名称。
4、TTL是什么?
面试官:TTL是什么?
我:TTL全称Time To Live(存活时间/过时时间),是mq中用来设置过时时间的。
面试官:咱们通常怎么设置过时时间,用哪些方式?
我:咱们有两种设置过时时间的方式,一个是对单个消息设置过时时间,一个是对一个队列设置过时时间,这样的话发送到队列中的消息都遵循那个过时时间。
1:队列设置过时时间:x-message-ttl,单位:ms(毫秒),这样的话进入队列的全部消息都遵循这个过时时间。
2:单个消息设置过时时间:expiration,单位:ms(毫秒),这样的话只有这条消息有过时时间。
面试官:那若是我即给单条消息设置了时间又给队列设置了时间会怎么样?
我:那样的话根据最短的那个时间来。
5、RabbitMQ延时队列怎么设计?
面试官:那你知道延时队列吗,通常都用来作什么场景下的需求呢?
我:知道,延时队列通常就是发送消息到MQ中后,消费者不要第一时间去处理,好比咱们点外卖的时候咱们下单成功了,这个时候库存已经减了,可是咱们尚未支付,若是咱们一直不支付的话,过30分钟订单就自动取消了,而后库存又恢复了。
面试官:那RabbitMQ有延时队列吗,若是让你本身设计一个延时队列怎么设计呢?
我:RabbitMQ中没有提供延时队列的功能,可是咱们可使用TTL+死信队列来实现延时队列的功能。
面试官:能够呀小伙子,这块掌握的不错
我:还行还行,都是平常的积累
面试官:小伙子真厉害啊,RabbitMQ掌握的很是棒,你面试经过了,明天上岗吧
我:啊,这么急吗,我后面还有好多东西没有讲呢。
面试官:不着急,进来了之后慢慢听你讲,加班让你跟我讲
我:啊。。。这也太难了吧
6、总结
这里关于RabbitMQ尚未整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令你们必定要像我同样每一个都敲几遍,只有在敲的过程当中才能发现本身对命令是否真正的掌握了。
若是以为个人文章还不错的话就点个赞吧