面试官:RabbitMQ怎么实现消费端限流

简介: 本文介绍RabbitMQ如何实现消费端限流,希望对大家有所帮助。

一、前言



RabbitMQ有很多高级特性,一般项目用不到,但是总有面试官会问到,被问到的时候我们要假装这些对我们来说就是小意思一样。


二、面试



面试官:小奇是吧,你先做一个自我介绍吧


我:面试官您好,我毕业于XXX,我之前在XXX工作,我精通XXX,总之一句话,我就是优秀,你问就完了。


面试官:行,你的自我介绍很强硬啊,那我看看你到底有没有过硬的实力


我:是骡子是马拉出来溜溜


三、RabbitMQ怎么实现消费端限流



面试官:好,那我先问你一个场景题,比如我们公司现在做了一个秒杀系统,在活动当天用户下单太多了,造成消费端崩溃了,这种情况我们该怎么处理呢


我:好说呀,多买几台服务器,多搭建几台消费端的服务,减缓服务端的压力,这样不就没有问题了吗。


面试官:额。。。你这么说确实可以解决,实不相瞒我们老板特别抠。。。不舍得买更多的服务器,就想让我们一台服务器搞定


我:???光让马儿跑,不让马儿吃草,那特么能行啊,跟你们老板说,让他自己出来顶着消费端的压力吧,他不是不舍得花钱吗,等秒杀的时候让他去用户那里捣乱,让用户不能够同一时间下单不就行了。


面试官:哎呀不行呀,我们也想过给用户捣乱,但是老板不让,老板说必须让用户在最短的时间内都完成下单


我:可以啊,那就使用MQ,让客户端下单后将下单信息放入消息队列中,然后让消费端去处理呗。


面试官:哎呀我们就是这么弄的,但是消费端总是崩溃


我:你们消费端服务器配置怎么样?


面试官:嗯。。消费端服务器配置是半核CPU、1G运行内存空间、10G磁盘空间


我: 半核? 你特么在逗我,另外半个CPU让别人掰走了?


面试官:嘿嘿,情况就是这么个情况,事情就是这么个事情,反正公司就是穷困潦倒,等你进来了我再慢慢跟你讲,你现在先帮我想一个解决方案,我用来应付一下老板


我:那就在消费端实现限流吧。


面试官:怎么实现呢?


我:使用channel.basicQos(int prefetchSize, int prefetchCount, boolean global)方法来设置限流的配置。


prefetchSize:表示消息的大小(0的话表示不限制大小)

prefetchCount:表示消息的数量

global:true表示该通道下的所有消费者都适用这个策略,而false表示只有当前这一个消费者适用这个策略。


21.png


如图,这里我们channel.basicQos(0,1,false);表示不限制消息的大小,但是限制消息的数量,一次只能给消费者发送一条消息。


面试官:为什么不限流的话会将消费端搞挂掉呢


我:假如现在小明的妈妈有10个饺子给小明吃,小明叫来了9个同学,然后他们一共10个人,一人一个饺子都是一口就吃完了没有任何问题,但是今天就小明一个人,总不能10个饺子一下塞到小明的嘴里面吧,这样直接将小明噎死了。


面试官:那怎么解决呢


我:现在小明先吃一个饺子,等小明吃完了这一个饺子后告诉他妈,说我吃完了,然后他妈再给他一个饺子吃,这样的话也是可以吃完10个饺子的,并且小明没有事。


面试官:我看限流的参数还有数据大小是干什么的


我:假如现在小明妈妈为了让小明一口就吃完十个饺子,他包了一个特别大的饺子,有一斤重,这个时候跟小明说还是一个饺子,一口闷吧,这个时候照样将小明噎死了,所以数据大小也是要限制的。


面试官:那队列怎么知道消费者消费完了一条消息,要给他再发送一条消息呢


我们要配置消费端手动确认,当我们消费端消费完消息后手动确认消息,这个时候队列就认为整个消费流程走完了,就开始下一个信息的发送了。


开启手动确认配置


22.png


代码中手动确认。


23.png


这里手动确认有两个参数,第一个是tag编号,就是这个消息的一个编号,第二个参数为是否确认多条,true的话就是确认多条消息,false的话就是只确认这一条消息,一般我们都是false。


面试官:可以呀小伙子,有点东西


我:请你不要迷恋哥,哥只是一个传说。。。


面试官:小伙子真厉害啊,一下子就把RabbitMQ消费端限流讲明白了,你面试通过了,明天上岗吧


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


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


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


四、总结



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


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




相关实践学习
5分钟轻松打造应对流量洪峰的稳定商城交易系统
本实验通过SAE极速部署一个微服务电商商城,同时结合RocketMQ异步解耦、削峰填谷的能力,带大家体验面对流量洪峰仍旧稳定可靠的商城交易系统!
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 架构师 Java
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
|
5月前
|
算法 NoSQL 应用服务中间件
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer
在 Nacos 的配置管理界面或通过 Nacos 的 API,创建一个名为(与配置文件中 dataId 一致)的配置项,用于存储 Sentinel 的流量控制规则。上述规则表示对名为的资源进行流量控制,QPS 阈值为 10。resource:要保护的资源名称。limitApp:来源应用,default表示所有应用。grade:限流阈值类型,1 表示 QPS 限流,0 表示线程数限流。count:限流阈值。strategy:流控模式,0 为直接模式,1 为关联模式,2 为链路模式。
阿里面试:10WQPS高并发,怎么限流?这份答案让我当场拿了offer
|
6月前
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
6月前
|
消息中间件 运维 Java
招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
45岁资深架构师尼恩针对一线互联网企业面试题,特别是招商银行的高阶Java后端面试题,进行了系统化梳理。本文重点讲解如何根据应用场景选择合适的消息中间件(如RabbitMQ、RocketMQ和Kafka),并对比三者的性能、功能、可靠性和运维复杂度,帮助求职者在面试中充分展示技术实力,实现“offer直提”。此外,尼恩还提供了《尼恩Java面试宝典PDF》等资源,助力求职者提升架构、设计、开发水平,应对高并发、分布式系统的挑战。更多内容及技术圣经系列PDF,请关注【技术自由圈】获取。
|
存储 算法 NoSQL
百度面试:如何用Redis实现限流?
百度面试:如何用Redis实现限流?
153 2
|
8月前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
9月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
12月前
|
消息中间件 Kafka
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
223 57
|
11月前
|
消息中间件 缓存 负载均衡
复盘女朋友面试4个月的RocketMQ面试题
这篇文章复盘了面试中关于RocketMQ的高频题目,包括架构组成、使用姿势、功能原理及高级特性,并强调了理解这些实现机制对于面试成功的重要性。
复盘女朋友面试4个月的RocketMQ面试题
|
12月前
|
消息中间件 Kafka API
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
面试题Kafka问题之RabbitMQ的扩展和二次开发如何解决
97 1

热门文章

最新文章