2022年5月31日 12:14 下午
•
面试问题 •
阅读 13
简介:本文讲解面试官:如何设计RabbitMQ过期时间设置、死信队列、延迟队列? ,希望对大家有帮助,欢迎收藏转发!网站地址:www.gsm-guard.net
你好!大家好,我是小奇,一个不靠谱的程序员。小奇打算在轻松幽默的谈话中分享一些技巧。如果你觉得通过小奇的文章学到了一些东西,那就给小奇点个赞吧。文章将持续更新。
我们经常使用RabbitMQ,但它有很多高级功能需要我们熟练掌握,才能处理实际场景中复杂的业务逻辑。
面试官:小奇,对吧?让我们开始采访吧
我:来吧,我又饿又渴
面试官:你用过RabbitMQ吗?
我:用过
面试官:RabbitMQ发送消息耗时较长,没人处理过期怎么办?
我:消息已经处理很久了,已经过期了。为了不影响交换机的正常使用,我们可以将过期的消息放入一个死信交换机中,然后将这个交换机绑定到一个队列,也就是死信队列,然后通过专门的消费者来处理这些过期的消息
面试官:只有消息到了过期日期还没有被消费掉才会进入死信交换吗?还有其他情况吗?
我:在三种情况下,一条消息会变成一纸空文。 1:队列消息长度达到限制。 2:消费者拒绝该消息,并且不将该消息放入原来的队列中供他重新发送。 3:原队列有消息过期设置,直到超时时间消息还没有被消费。
面试官:我们如何定义死信开关并将其绑定到死信队列?
我:我们可以通过x-dead-letter-exchange和x-dead-letter-routing-key这两个参数来配置死信交换机的名称以及死信交换机与死信队列之间的路由键名称。
面试官:TTL是什么?
我:TTL的全称是Time To Live(生存时间/过期时间),用于设置mq中的过期时间。
面试官:我们一般如何设置过期时间,采用什么方法?
我:我们有两种方法来设置过期时间。一种是为单个消息设置过期时间,另一种是为队列设置过期时间。在这种情况下,发送到队列的所有消息都遵循该到期时间。
1:队列设置过期时间:x-message-ttl,单位:ms(毫秒),这种情况下,所有进入队列的消息都会遵循这个过期时间。2:设置单条消息的过期时间:expiration,单位:ms(毫秒),此时只有这条消息有过期时间。
面试官:那么如果我为单个消息设置一个时间并为队列设置一个时间,会发生什么?
我:那就按照最短的时间来算吧。
面试官:你知道延迟队列一般用于什么场景吗?
我:是的,延迟队列一般是指消息发送到MQ后,消费者不应该立即处理它。比如我们点外卖,下单成功,此时库存已经减少了,但是我们还没有付款。如果我们不付款,订单将在30分钟后自动取消,然后库存将恢复。
面试官:RabbitMQ 有延迟队列吗?如果让你自己设计一个延迟队列,你会如何设计?
我:RabbitMQ没有提供延迟队列功能,但是我们可以使用TTL+死信队列来实现延迟队列功能。
面试官:是的,年轻人,你处理得很好。
我:没关系,都是每天积累的。
面试官:你真是个了不起的年轻人。您已经很好地掌握了 RabbitMQ。你通过了面试。明天你将开始你的工作。
我:啊,这么着急吗?我还有很多事情后来没有讲到。
面试官:你放心,我进来后会慢慢听你说的,而且还会让你跟我说加班。
我。 。 。这也太难了吧?
这里的RabbitMQ还没有整理出来。文章会持续更新,建议收藏。
您必须像我一样多次键入本文中提到的每个命令。只有在打字的过程中才能发现自己是否真正掌握了命令。
如果您觉得我的文章不错,请点个赞
版权声明:本文内容由网友自愿贡献,本文所表达的观点仅代表作者自己的观点。本网站仅提供信息存储空间服务,不拥有任何所有权,也不承担相关法律责任。如果您发现本站有任何涉嫌侵权/非法内容,请发送邮件举报。一经核实,该网站将立即删除。
本文由斑马博客整理。本文链接:https://www.gsm-guard.net/index.php/post/18185.html