java面试题(RabbitMQ)

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

点赞关注+收藏,万分感谢!!

1、RabbitMQ 的使用场景有哪些?

抢购活动,削峰填谷,防止体系崩塌。
耽误信息处理,比如 10 分钟之后给下单未付款的用户发送邮件提示。
解耦体系,对于新增的功能可以单独写模块扩展,比如用户确认评价之后,新增了给用户返积分的功能,这个时候不用在业务代码里添加新增积分的功能,
只需要把新增积分的接口订阅确认评价的消息队列即可,后面再添加任何功能只需要订阅对应的消息队列即可。
2、RabbitMQ 有哪些重要的脚色?

RabbitMQ 中重要的脚色有:生产者、消费者和署理:
生产者:消息的创建者,负责创建和推送数据到消息服务器;
消费者:消息的接收方,用于处理数据和确认消息;
署理:就是 RabbitMQ 本身,用于扮演“快递”的脚色,本身不生产消息,只是扮演“快递”的脚色。
3、RabbitMQ 有哪些重要的组件?

ConnectionFactory(毗连管理器):应用程序与Rabbit之间创建毗连的管理器,程序代码中使用。
Channel(信道):消息推送使用的通道。
Exchange(交换器):用于接受、分配消息。
Queue(队列):用于存储生产者的消息。
RoutingKey(路由键):用于把生成者的数据分配到交换器上。
BindingKey(绑定键):用于把交换器的消息绑定到队列上。
4、RabbitMQ 中 vhost 的作用是什么?

vhost:每个 RabbitMQ 都能创建很多 vhost,我们称之为虚拟主机,每个虚拟主机其实都是 mini 版的RabbitMQ,它拥有本身的队列,交换器和绑定,拥有本身的权限机制。
5、RabbitMQ 的消息是怎么发送的?

起首客户端必须毗连到 RabbitMQ 服务器才能发布和消费消息,客户端和 rabbit server 之间会创建一个 tcp 毗连,一旦 tcp 打开并通过了认证(认证就是你发送给 rabbit 服务器的用户名和密码),
你的客户端和 RabbitMQ 就创建了一条 amqp 信道(channel),信道是创建在“真实” tcp 上的虚拟毗连,amqp 命令都是通过信道发送出去的,每个信道都会有一个唯一的 id,不论是发布消息,订阅队列都是通过这个信道完成的。
6、RabbitMQ 怎么包管消息的稳固性?

提供了事务的功能。
通过将 channel 设置为 confirm(确认)模式。
7、RabbitMQ 怎么制止消息丢失?

包管消息不会丢失
消息持久化;ACK确认机制;设置集群镜像模式;消息补偿机制
第一种:消息持久化
RabbitMQ的消息是默认放在内存的,假如不特别声明消息持久到磁盘,当节点关掉或者crash(碰撞)掉,消息就会丢失。
那么要把数据持久到磁盘就要满意三个条件,缺一不可:
Exchange(交换) 设置持久化
Queue(队列)() 设置持久化
Message(信息)持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息
第二种:ACK确认机制
就是多个消费者收到消息,收到一半就没了,消费者就死掉了;
这个使用就要使用Message acknowledgment 机制,就是消费端消费完成要通知服务端,服务端才把消息从内存删除,一个消费者出了问题,没有同步消息给服务端,还有其他的消费端去消费,包管了消息不丢的case
第三种:设置集群镜像模式
RabbitMQ三种部署模式:
单点模式:最简朴的模式,非集群模式,节点挂了,消息不可用了,业务瘫痪,只能等候;
普通模式:必须消息是持久的,默认是集群模式,某个节点挂了,消息不可用了,业务瘫痪了,此时只能等候节点恢复重启使用;
镜像模式:把队列做成镜像需要的队列,存放于多个节点,属于RabbitMQ的HA方案;队列的内容仅仅只存在于某一个节点,并不在所有的节点,节点只会仅仅存放数据结构和元数据。
第四种:消息补偿机制
消息补偿机制需要创建在消息要写入DB日记,发送日记,接受日记,两者的状态必须记录,然后根据DB日记记录check 消息发送消费是否成功,不成功,进行消息补偿步调,重新发送消息处理。
8、要包管消息持久化成功的条件有哪些?

声明队列必须设置持久化 durable 设置为 true.
消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。
消息已经到达持久化交换器。
消息已经到达持久化队列。
以上四个条件都满意才能包管消息持久化成功。
9、RabbitMQ 持久化有什么缺点?

持久化的缺地就是低沉了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而低沉了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。
10、RabbitMQ 有几种广播范例?

direct(默认方式):最基础最简朴的模式,发送方把消息发送给订阅方,假如有多个订阅者,默认接纳轮询的方式进行消息发送。
headers:与 direct 雷同,只是性能很差,此范例险些用不到。
fanout:分发模式,把消费分发给所有订阅者。
topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到。
11、RabbitMQ 怎么实现耽误消息队列?

耽误队列的实现有两种方式:
通过消息过期后进入死信交换器,再由交换器转发到耽误消费队列,实现耽误功能;
使用 RabbitMQ-delayed-message-exchange 插件实现耽误功能。
12、RabbitMQ 集群有什么用?

集群重要有以下两个用途:
高可用:某个服务器出现问题,整个 RabbitMQ 还可以继承使用;
高容量:集群可以承载更多的消息量。
13、RabbitMQ 节点的范例有哪些?

磁盘节点:消息会存储到磁盘。
内存节点:消息都存储在内存中,重启服务器消息丢失,性能高于磁盘范例。
14、RabbitMQ 集群搭建需要留意哪些问题?

各节点之间使用“--link”毗连,此属性不能忽略。
各节点使用的 erlang cookie 值必须相同,此值相当于“秘钥”的功能,用于各节点的认证。
整个集群中必须包含一个磁盘节点。
15、RabbitMQ 每个节点是其他节点的完备拷贝吗?为什么?

不是,原因有以下两个:
存储空间的思量:假如每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增长了更多的冗余数据;
性能的思量:假如每条消息都需要完备拷贝到每一个集群节点,那新增节点并没有提拔处理消息的能力,最多是保持和单节点相同的性能以致是更糟。
16、RabbitMQ 集群中唯逐一个磁盘节点崩溃了会发生什么环境?

假如唯一磁盘的磁盘节点崩溃了,不能进行以下操作:
不能创建队列
不能创建交换器
不能创建绑定
不能添加用户
不能更改权限
不能添加和删除集群节点
唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西。
17、RabbitMQ 对集群节点停止顺序有要求吗?

RabbitMQ 对集群的停止的顺序是有要求的,应该先关闭内存节点,最后再关闭磁盘节点。假如顺序恰恰相反的话,大概会造成消息的丢失。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表