#ribbitmq面试题和使用汇总

**

rabbitmq常见面试题

**

1.使用ribbitmq有什么好处?
1.解耦:A可以在代码中直接调用B和C,如果想调用D,又需要改A的代码,这样麻烦,如果用了ribbitmq只需要直接把D注册到服务中A就可以直接调用.
2.异步:将消息写入队列中,加快响应速度(如短信功能:在用户提出发送短信之后,后台接收到请求,把请求消息放到队列中,然后异步处理,前台直接得到短信发送成功的消息,后台再调短信系统发送短信,使用户的体验感更好)
3,削峰:在并发量大的时候,所有请求直接进入到数据库,容易使服务器崩溃.(如:有一千万个请求直接进入到后台服务器,数据库只能承载10万个请求,这时候会导致崩溃,用ribbitmq可以有效地拦截其他990万的请求,让最先进来的10万个进行处理完毕后,再处理10万个,有序执行)
2.ribbitmq的消息是怎么传输的?
ribbitmq是通过信道来传输消息,信道是tcp连接的虚拟连接,且每条tcp连接上的信道都是没有限制的.(tcp连接的创建与销毁开销比较大,而且并发数受系统资源限制,会导致性能瓶颈)
3.消息是怎么路由的?
消息路由必须有三个部分:交换器,路由,绑定.生产者把消息发布到交换器上,绑定决定了交换器如何把消息路由到特定的队列中,消费者通过特定的队列消费消息.
1.消息发布到交换器时,消息将拥有一个路由键(routing key) ,这是在消息创建时设定.
2.然后通多队列路由键把消息绑定到交换器上.
3.消息到达交换器之后,通过消息得路由键与队列得路由键进行匹配,匹配成功消息会进入到对应得队列中.(不同的交换器有不同的路规则)
常见得交换器有以下三类:
1.direct:如果路由键完全匹配,消息会进入到相应得队列中
2.fanout:如果交换器收到消息,将会广播到所有绑定得队列中
3.topic:可以时来自不同源头的消息都进入到同一队列中.使用topic交换器时,可以使用通配符(如:"*“匹配特定位置的任意文本,”,“把路由键分为了几个部分,”#“匹配所有规则等.发往topic交换器的消息不能随意选择键(routing_key),需要通过”."分隔的一系列标识符组成)
4.如何确保消息发送到ribbitmq?
ribbitmq是采用发送者确认模式来确保消息发送到mq中.发送者确认模式:所有在信道上的消息都会生成唯一的id,在消息进入到队列之后,信道会发送一条确认的消息给发送者,如果因为mq内部的错误导致消息丢失,俺么就会发送一个未确认的消息(nack)
5.如何确保消费方消费了消息?
消费方确认机制:消费者接收到消息然后再进行确认,只有消费者接收到消息确认之后,mq才会从队列里面删除消息.ribbitmq是采用长连接的方式,mq会一直连接consumer判断连接是否中断来重发消息.只要连接不中断hi有足够的时间来处理消息.
有两种情况:
1.消费者接收到消息但是一直没确认,后来连接中断,那么mq会认为消费者没有接收到消息,重新发送一条消息给下一个消费者(可能存在消息被重复发送的问题)
2.消费者接收到消息但是一直没确认,后来没有断开.mq会认为系统繁忙,不会重新发送消息.
6.如何确保消息不被重复投递,重复消费
消息在生产的是否会生成一个inner-msg-id(唯一id)来确保不会重复投递,在消费消息的时候要求消息体中有一个bizld(唯一标识)来确保不会重复消费.(如果万一出现这种问题,还可以是以哦那个第三方介质来保证.如:用redis,给消息分配一个全局id,在消费消息的时候把数据写入redis (<“id”,“message”>),那么在每次消费之前先检查redis中是否存在这个id)

ribbitmq基本使用

一、安装erlang,环境变量配置
https://blog.csdn.net/g6256613/article/details/80191402

输入erl –version查看安装是否成功。

二、rabbitMQ的安装
下载exe,安装。cd到其sbin目录。

执行插件命令rabbitmq-plugins enable rabbitmq_management 开启管理后台的插件

执行开启服务命令rabbitmq-server start

登录浏览器后台http://localhost:15672 账号和密码都是guest,添加用户、vhost、授权
https://blog.csdn.net/qq_33382113/article/details/78853680 资料

ribbitmq的几种模式

1.工作队列模式
在采取轮询机制这里插入图片描述
采取轮询机制,C1消费消息之后,第二次会把消息给C2,然后再轮到C1
2.发布订阅模式
在这里插入图片描述
1.一个生产者把消息发个交换机.
2.与交换机绑定的有多个队列,每个消费者监听自己的队列.
3.生产者将消息发送个交换机,交换机将消息发送给每个绑定的队列,队列直接接收消息.(实际运用中:短信群发)
3.routing模式
在这里插入图片描述
1.一个交换机绑定多个队列,每个队列绑定routingkey,并且每个队列可以绑定多个routingkey.
2.消费者监听自己的队列
3.生产者将消息发给交换机,交换机把消息根据指定的routingkey和队列的routingkey,判断是否相等,然后分发给指定的队列,如果队列routingkey有一样的,那就同时发给这几个routingkey一样的队列
4.topic模式
topic是与routing的基本原理相同都是通过routingkey去匹配相应的队列.但是,不同之处就在与topic可以采用通配符的方式去匹配,routing是采用完全相等去匹配.
在这里插入图片描述
5.header模式
header模式取消了routingkey采用key/value键值对的方式匹配队列在这里插入图片描述
6.RPC模式
RPC就是客户端远程调用服务端,使用MQ可以实现RPC的异步调用,是基于direct交换机实现的.流程如下:
1.客户端既是生产者又是消费者,向RPC请求队列发送消息,远程服务端发送消息,同时监听RPC响应队列.
2.服务端消费RPC队列消息,收到消息之后执行服务端方法,得到方法结果.
3.服务端把消息返回给RPC响应队列.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值