面试官:RabbitMQ有哪些工作模式?
哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新
一、前言
今天又、又、又来面试了,还是老规矩,上来先做两张面试题,然后填半斤表,什么血型、什么星座的,话说我不知道自己什么血型,只能空着了。。。

今天这公司环境还可以,大厅可以看到外面的世界,我已经想好了以后该去哪里摸鱼了(前提是能够面试上)。。。

在用完了两根签字笔后,重要填写完了这半斤表,然后交给面试官,等待面试。。。
二、面试
面试官:小奇是吧,过来路上远吗
我:不远,也就二里地吧。。。
面试官:行,那咱们直接进入主题,我看你这简历上写着对RabbitMQ非常有了解是吗
我:何止是非常了解啊,那是相当的了解。。。
三、RabbitMQ工作模式
面试官:哦~,那你先说一下RabbitMQ有哪些工作模式吧
我:RabbitMQ一般有五种工作模式。
1:简单模式
2:work工作模式
3:pub/sub发布订阅模式
4:Routing路由模式
5:Topics主题模式
面试官:那你能说一下这些模式的原理与区别吗
简单模式:就是一个生产者一个消费者,中间通过一个队列直接连接。

work工作模式:就是有多个消费者消费队列里的消息,队列里的消息只能被一个消费者消费,这样多部署几个消费者,就可以缓解压力,比如过年的时候抢票,抢票成功后会给你发短信,这个时候就可以把发短信的任务放入队列里,然后有多个发短信的服务来处理队列里的任务。

pub/sub发布订阅模式:上面两种模式生产者的消息只能被一个消费者消费,不符合某些实际场景。
假如我们有一个国家气象局天气预报系统,这个时候他发送消息,其他的服务商,比如百度、网易、腾讯等公司都要从国家天气预报系统那里获取天气怎么办呢?
总不能百度获取了今天的天气其他公司就获取不了天气了吧,或者让国家天气预报系统给每个服务商都发送一次消息,那样显然是很麻烦的。
所以我们需要用到一个Exchange交换机角色来帮助我们把消息发给所有订阅我们的服务商。

Routing路由模式:路由模式就是交换机并不是给所有订阅他的队列发送消息了,而是根据路由键来确定应该给哪个队列发送消息,队列和交换机绑定的时候需要通过路由键,而生产者发送消息的时候也需要指定路由键,这样就可以确定给哪个队列发送消息了。
这里我们可以看到是给张三发送消息,所以只会给路由键为张三的那个队列发送消息。

Topics主题模式:主题模式就相当于模糊匹配,假如我想给姓张的发送消息,那么我就可以通过主题模式给所有姓张的发送消息。

面试官:你说的非常的全面,但是我记不住, 能用一个生活中的例子来描述一下吗
我:记不住就背,八股文哪有那么容易就记住的。。。
假如我今天去公司的会议室办公了,公司的会议室只有一根网线,那我自己一个人是不是就可以连接这根网线使用了呢,这个就是简单模式,一对一。
到了下午了张三也来会议室工作了,就一个网线怎么办,这时我想到了一个方法,我们两个一人插一会网线,比如我写邮件的时候不需要插网线,但是我发邮件的时候你就把网线让给我让我发出去,就这样我和张三每人用五分钟网线,这就是work工作模式,一根网线两个人用,其中一个人用了,另一个人就用不到了。
又过了一会李四也特么的来会议室了,这咋整,三个人用一根网线也太难了吧,但是聪明的我又想到了一个方法,我们找来了一个路由器,将网线接入路由器,然后我们每个人的笔记本电脑都连接路由器的无线网,这样我们都可以上网了,这就是pub/sub发布订阅模式,所有订阅路由器的笔记本电脑都可以收到流量,都可以上网哈。
过了一会网越来越卡了,我特么一看后台有8个人连接我们的无线网,原来我们没有设置密码,隔壁摸鱼的小姐姐连接无线逛淘宝呢,我一想不行啊,得设置一个密码吧,然后就设置了一个密码,所有知道密码的人才能连接路由器。这里就相当于Routing路由模式。
但是有人说密码太长了记不住,我特么说请把记住密码打上对勾谢谢,但是偏偏有人不打对勾天天问,我没办法了,我说不然就设置一个模糊密码吧,你们前三位都输入123,后面的数字随便输入,我这里判断前面是123的密码我都算正确,都让你们上网。这就相当于主题模式,这里的主题就是123。
面试官:哇塞,听你这么一讲,我有点永生难忘啊
我:请你不要迷恋哥,哥只是一个传说。。。
面试官:小伙子真厉害啊,一下子就把这几种模式讲的栩栩如生,你面试通过了,明天上岗吧
我:啊,这么急吗,我后面还有好多东西没有讲呢。
面试官:不着急,进来了以后慢慢听你讲,你不都已经找好摸鱼的地方了吗,到时候咱们一块去那里聊天
我:这都被你发现了啊。。。
四、总结
这里关于RabbitMQ还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧
面试官:RabbitMQ有哪些工作模式?的更多相关文章
- RabbitMQ的六种工作模式
一.基于erlang语言: 是一种支持高并发的语言 RabbitMQ的六种工作模式: 1.1 simple简单模式 消息产生着§将消息放入队列 消息的消费者(consumer) 监听(while) 消 ...
- RabbitMQ的六种工作模式总结
最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...
- RabbitMQ 五种工作模式
官网介绍:https://www.rabbitmq.com/getstarted.html 五种工作模式的主要特点 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获 ...
- SpringBoot整合RabbitMQ实现六种工作模式
RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...
- 『假如我是面试官』RabbitMQ我会这样问
1. 为什么你们公司选择RabbitMQ作为消息中间件 在消息队列选型时,我们调研了市场上比较常用ActiveMQ,RabbitMQ,RocketMQ,Kafka. RabbitMQ相对成熟稳定,这是 ...
- RabbitMQ工作模式
------------恢复内容开始------------ RabbitMQ基本概念: Producer:生产者(消息的提供者) Consumer:消费者(消息的使用者) Message:消息(程序 ...
- 面试官:Redis的共享对象池了解吗?
我正在面试间里焦急地等待着,突然听到了门外的脚步声,随即门被打开,穿着干净满脸清秀的青年走了进来,一股男士香水的淡香扑面而来. 面试官:"平时在工作中用过Redis吗?" 我:&q ...
- java面试一日一题:rabbitMQ的工作模式
问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...
- rabbitmq官方的六种工作模式
1.RabbitMq1.1介绍RabbitMQ是一个消息代理:它接受并转发消息.你可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里.在这个例 ...
随机推荐
- PHP命令执行集锦
前言 代码审计总要遇到命令执行或者说RCE,打CTF的过程中难免不会碰见,毕竟PHP是世界上最好的语言,总结一下 命令执行函数 E.g.1 <?php error_reporting(0); s ...
- Mybatis传递参数的几种方式
使用Map传递 优点:直接在sql中取出key即可 缺点:适用于小项目,不符合大公司规范 对象传递参数 优点:符合标准规范 缺点:麻烦 3.只有一个基本类型参数的情况下,直接在sql中取中 4.多个参 ...
- linux内存(三)内核与用户空间交互
来自网址http://www.kerneltravel.net/jiaoliu/005.htm 用户程序和内核的信息交换是双向的,也就是说既可以主动从用户空间向内核空间发送信息,也可以从内核空间向用户 ...
- 【Python 第0课】Why Python?
为什么用Python作为编程入门语言? 原因很简单. 嗯...原因就是,很简单... 每种语言都会有它的支持者和反对者.去Google一下"why python"(程序员准则:要G ...
- RenderDoc图形调试器详细使用教程(基于DirectX11)
前言 由于最近Visual Studio的图形调试器老是抽风,不得不寻找一个替代品了. 对于图形程序开发者来说,学会使用RenderDoc图形调试器可以帮助你全面了解渲染管线绑定的资源和运行状态,从而 ...
- HTML-置换元素
我们都知道,行内元素不能够定义宽度和高度,但 img,input,button等标签作为行内元素却可以定义宽高,为什么呢?这就牵扯到了置换元素和非置换元素. 置换元素: w3c官方解释:"A ...
- Replicated State Machine和WAL
在阅读raft论文的时候,考虑两个问题: 为什么要用Replicated State Machine?没有其他方式吗 为什么要先写日志再应用到Replicated State Machine,直接应用 ...
- 用maven建立一个工程5
在命令行里面输入cd myapp再按回车 再输入mvn compile再按回车 再输入 cd target按回车 再输入cd../按回车 再输入mvn package按回车 最后输入java -cla ...
- Mybatis入门程序(一)
1.入门程序实现需求 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户(二) 更新用户(二) 删除用户(二) 2.引入Mybatis所需 jar 包(Maven工程) < ...
- spring @Bean和@Order 官方doc理解
今天阅读了spring的官方代码,(大概)理解了@Bean和@Order如何使用. @Bean 官方代码解读: 0.@Bean的注入,用于表示这个bean被spring容器管理(创建.销毁)(官方英文 ...