哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新

一、前言

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

二、面试

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

面试官:怎么实现呢?

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

prefetchSize:表示消息的大小(0的话表示不限制大小)
prefetchCount:表示消息的数量
global:true表示该通道下的所有消费者都适用这个策略,而false表示只有当前这一个消费者适用这个策略。

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

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

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

面试官:那怎么解决呢

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

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

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

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

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

开启手动确认配置

代码中手动确认。

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

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

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

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

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

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

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

四、总结

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

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

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

面试官:RabbitMQ怎么实现消费端限流的更多相关文章

  1. RabbitMQ 消费端限流、TTL、死信队列

    目录 消费端限流 1. 为什么要对消费端限流 2.限流的 api 讲解 3.如何对消费端进行限流 TTL 1.消息的 TTL 2.队列的 TTL 死信队列 实现死信队列步骤 总结 消费端限流 1. 为 ...

  2. SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)

    目录 说明 生产端 消费端 说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同 ...

  3. RabbitMQ消费端限流策略(十)

    消费端限流: 什么是消费端限流? 场景: 我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么 ...

  4. Rabbitmq——实现消费端限流 --NACK重回队列

    如果是高并发下,rabbitmq服务器上收到成千上万条消息,那么当打开消费端时,这些消息必定喷涌而来,导致消费端消费不过来甚至挂掉都有可能. 在非自动确认的模式下,可以采用限流模式,rabbitmq ...

  5. Rabbitmq之高级特性——实现消费端限流&NACK重回队列

    如果是高并发下,rabbitmq服务器上收到成千上万条消息,那么当打开消费端时,这些消息必定喷涌而来,导致消费端消费不过来甚至挂掉都有可能. 在非自动确认的模式下,可以采用限流模式,rabbitmq ...

  6. jmeter压测IP欺骗绕过服务端限流

    1.环境声明 jmeter3.0 后端为内网环境 2.检查内网闲置的ip 工具地址,无需复杂安装,解压点击就可以用啦~~ https://pan.baidu.com/s/1Yzs1vezfFMoy-m ...

  7. 消费端ACK和重回队列

    使用场景 消费端ACK和重回队列 消费端ACK使用场景: 1.消费端进行消费的时候,如果由于业务异常我们可以进行日志记录,然后进行补偿. 2.由于服务器宕机等严重问题,那我们就需要手工进行ACK保障消 ...

  8. 服务接口API限流 Rate Limit

    一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...

  9. 简易RPC框架-客户端限流配置

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. Python 实现 JWT 生成

    Python 实现 JWT 生成 JWT 简介:https://www.jianshu.com/p/576dbf44b2ae Json web token (JWT), 是为了在网络应用环境间传递声明 ...

  2. SpringBoot 中实现跨域的几种方式

    一.为什么会出现跨域问题 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响. ...

  3. Twist the Permutation 数列的轮换题 Codeforces 776 div3

    这是一道比较经典的将数列中的数字轮换的题目,我们先看题干: 题干分析:先浅浅地分析一下题目是要我们干什么,我们会默认有一个已经升序排序地1~n的排列,然后我们会给定一个新排列是在原有排列的基础上进行o ...

  4. 网络爬虫笔记之http协议

    http协议和https协议: HTTP协议:HyperText Transfer Protocol,超文本传输协议,是一种发布和接收HTML页面的方法.服务器端口号是80. HTTPS协议:是HTT ...

  5. Java基础 - 注解详解

    What - 什么是注解?        Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...

  6. mysql问题排查与性能优化

     MySQL 问题排查都有哪些手段? 使用 show processlist 命令查看当前所有连接信息. 使用 explain 命令查询 SQL 语句执行计划. 开启慢查询日志,查看慢查询的 SQL. ...

  7. Zookeeper 的典型应用场景 ?

    Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...

  8. CommonsCollection2反序列链学习

    CommonsCollection2 1.前置知识 CmonnosCollection2需要用到Javassist和PriorityQueue 1.1.Javassist Javassist是一个开源 ...

  9. 模型预测控制(MPC)简介

    1.引言 在当今过程控制中,PID当然是用的最多的控制方法,但MPC也超过了10%的占有率.MPC是一个总称,有着各种各样的算法.其动态矩阵控制(DMC)是代表作.DMC采用的是系统的阶跃响应曲线,其 ...

  10. 洋桃电子之STM32

    1.ARM内核与分类 作者:知乎用户链接:https://www.zhihu.com/question/52915983/answer/258507276来源:知乎著作权归作者所有.商业转载请联系作者 ...