RabbitMQ面试题概述_JAVA_Bald_but的博客-程序员宅基地

技术标签: rabbitmq  

rabbitMQ(共10题)



前言

        RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;


1、什么是RabbitMQ?为什么使用RabbitMQ?

        RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;

可以用它来:解耦、异步、削峰。

2、使用RabbitMQ有什么好处?

①.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

②.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

③.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

3、RabbitMQ 中的 broker 是指什么?cluster 又是指什么?

        broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。

#4、RabbitMQ有什么优缺点?

        优点:解耦、异步、削峰;

        缺点:降低了系统的稳定性:本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低;

        增加了系统的复杂性:加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。

5、如何保证RabbitMQ的高可用?

        没有哪个项目会只用一搭建一台RabbitMQ服务器提供服务,风险太大;

6、如何保证RabbitMQ消息的可靠传输?

        消息不可靠的情况可能是消息丢失,劫持等原因;

        丢失又分为:生产者丢失消息、消息列表丢失消息、消费者丢失消息;

7、如何保证RabbitMQ消息的顺序性?

        单线程消费保证消息的顺序性;对消息进行编号,消费者处理消息是根据编号处理消息;

8、如何保证RabbitMQ不被重复消费?

        先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除;

        但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。

        针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息等幂性;

9、消息基于什么传输?

         由于TCP连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ使用信道的方式来传输数据。信道是建立在真实的TCP连接内的虚拟连接,且每条TCP连接上的信道数量没有限制。

10、消息如何分发?

        若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。


总结

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JAVA_Bald_but/article/details/108753915

智能推荐

海量数据迁移之通过rowid切分大表_congjiu2607的博客-程序员宅基地

在之前的章节中,讨论过了通过 分区+并行等方式来进行超大的表的切分,通过这种方式能够极大的提高数据的平均分布,但是不是最完美的。比如在数据量再提高几个层次,我们假设这个表目前有1T的大小。有10个分区,最大的分区有4...

Android中快速打包神器_贤泽的博客-程序员宅基地

Android app上线当有很多渠道的时候,打包就很痛苦,使用as默认的打包,打包20+个大概需要半小时,太慢了,效率很差,之后就推荐两个快速打包工具https://github.com/mcxiaoke/packer-ng-pluginhttps://github.com/Meituan-Dianping/walle前者需要禁用v2签名,但后者就可以兼容v2签名,两者操作都很简单,

如何看XenServer的全面开源 (马后炮)_weixin_34150503的博客-程序员宅基地

今天早上weibo上关于xenserver开源的消息很热闹,但实际上这个传言在市场上已经有一段时间了,只不过在今天被证实了。相关信息可以在以下网站找到 http://www.xenserver.org 一直以来一些分析师认为,XenServer在Citrix内部不够重视,比如在参加了Citrix Synergy 2013后,ZDNET的分析师认为,XenServer的定位已经开始发生了转变,由成...

android系统右划返回,Android 右滑返回_蛋丁的人参的博客-程序员宅基地

右滑返回compile 'com.github.liuguangqiang.swipeback:library:[email protected]' #写一个类继承于这个SwipeBackSlideBackActivitypublic class SlideBackActivity extends SwipeBackActivity {@Overrideprotected void onCreate(@Nulla...

荣耀30青春版发布 简单说说有哪些亮点_hanniuniu13的博客-程序员宅基地

不久之前,荣耀在7月2日发布荣耀30青春版,受到很多人的关注。作为许多年轻人青睐的品牌,荣耀一直努力打造年轻人喜爱的潮流新品,这次荣耀30青春版就是其中之一。这款手机以“5G青春 美好如你”为主题,在海报上首次展示两种时尚配色,美轮美奂。下面我就简单来说说,荣耀30青春版都有哪些亮点。 在外观方面,荣耀30青春版充分考虑到年轻人“颜值为上”原则,将光影与手机结合,搭配夏日彩虹、幻镜银等四种潮流配色,总有一款能吸引到你。屏幕方面采用一块6.5英寸水滴屏,屏占比高达91.2%,并支持90Hz屏幕刷新率,使用

Go开发工具_lovewater的博客-程序员宅基地

1.4 Go开发工具本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。LiteIDELiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。图1.4 LiteIDE主界面LiteIDE主要特点:支持主流操作系统WindowsLinuxMacOS X

随便推点

修改AIX Noncomp内存占用比_weixin_34392906的博客-程序员宅基地

解决AIX系统由于文件缓存在内存未释放引发的进程异常终止问题:topas:Noncomp占用过多内存占用内存前十的进程:ps -ealf | head -1 ; ps -ealf | sort -rn +9 | headAix命令:列出使用内存和Cpu前几位的进程(1)显示10个消耗cpu最多的进程  # ps aux |head -1 ;ps aux |sort -rn +2 |hea...

HDU1048 凯撒加密_大大的梦_小小的步伐的博客-程序员宅基地

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1048输入一串字符,对其进行加密。将一个字母换成ascii+21的字母。若超过Z,返回到A继续。#include#includeint main(){ char a[20], b[150]; while (gets(a)) { mems

art-template 模板继承和子模板_陈小梓forever的博客-程序员宅基地

安装:npm install --save art-template// 在浏览器中下载时不需要安装npm install --save express-art-template配置:// 第一个参数用来配置视图的后缀名,这里是 art ,则存储在 views 目录中的模板文件必须是 xxx.art// app.engine('art', require('express-art-template'))// 这里把 art 改为 htmlapp.engine('html', requir

BasicResponseHandler_Simon188的博客-程序员宅基地

jar包: HttpClient 4.x版本 简要介绍HttpComponents 包括 HttpCore包和HttpClient包HttpClient:Http的执行http请求DefaultHttpClient:httpClient默认实现HttpGet、HttpPost:Get、Post方法执行类HttpResponse:执行返回的Response,含http

深入浅出Visual C++动态链接库(Dll)编程_weixin_33727510的博客-程序员宅基地

文章作者:宋宝华信息来源:天极网原始连接: http://soft.yesky.com/lesson/318/2166818.shtml?412  动态链接库(DLL)是Windows系统的核心,也是COM技术的基础,因此突破动态链接库一直是技术人员的攻坚目标,本期专题将由浅入深的介绍动态链接库的基础慨念、分类、实现和应用。基础慨念1.概论   先来阐述一下DLL(Dynamic Li...

分水岭算法的python实现及解析_进不去的博客-程序员宅基地_分水岭算法python

1 算法简介分水岭算法的原理很容易查到,就是往山谷中注水,把不同湖水接触的位置称作分水岭,这么做的结果有两个:1.得到整个区域的分界线2.把整个区域编号这是一种很容易过分割的算法,需要一些预处理手段和一些优化,本文只解析基本原理(下图的注水过程是一种基于人为标记的方法)2 代码步骤说明分水岭算法的步骤如下:1.将图像的所有像素按像素值从小到大排序,这里可以利用直方图将像素信息塞入数组2.开始按灰度级从小到大顺序遍历所有像素,先将该灰度级的全部像素标记为待计算点,若点的邻域内有已存在的水池