- 1,RabbitMQ的使用场景有哪些?
- 2,RabbitMQ执行的原理
- 3,消息队列的基本模型
- 4,RabbitMQ什么情况下会出现消息丢失,如何解决
- 5,RabbitMQ如何防止重复消费消息:幂等
- 6,PabbitMQ的交换机分为几类?有什么区别
- 7,springboot整合MQ的大致步骤
- 8,RabbitMQ有哪些重要的角色?
- 9,rabbitMQ有哪些重要的组件?
- 10,RabbitMQ要保证消息持久化成功的条件有哪些?
- 11,rabbitMQ怎么保证消息的稳定性?
- 12,rabbitMQ怎么避免消息丢失?
- 13,rabbitMQ持久化有什么缺点?
- 14,rabbitMQ中vhost的作用是什么?
- 15,rabbitMQ怎么实现延迟队列,使用场景?
- 16,rabbitMQ集群有什么用?
- 17,rabbitMQ节点的类型有哪些?
- 18,rabbitMQ集群搭建需要注意哪些问题?
- 19,rabbitMQ每个节点是其他节点的完整拷贝吗?为什么?
- 20,rabbitMQ集群中唯一一个磁盘节点崩溃了会发生什么情况?
- 21,rabbitMQ对集群节点停止顺序有要求吗?
1,RabbitMQ的使用场景有哪些?
消峰:消除峰值
异步化提速(发消息)提高系统稳定性(多系统调用),服务解耦(5-10个服务),排序保证,消除峰值
异步:任务异步处理。将不需要同步处理的并且耗时长的操作由消息队列通知消息接受进行异步处理。提高了应用程序的响应时间,提高系统稳定性。
解耦:应用程序解耦合MQ相当于一个中介,生产方通过mq与消费方交互,它将应用程序进行解耦。
2,RabbitMQ执行的原理
生产者和消息队列建立连接 =》》 创建通道 =》》创建交换机 =》》 交换机将信息分发不同的队列 =》》消费者和消息队列建立连接 =》》建立通道 =》》 去对应的队列中获取消息。
3,消息队列的基本模型
一:基本模型(一个生产者对应一个消费者)
二:订阅模型(一个生产者对应多个消费者)
三:订阅模型 交换机的类型
fanout:把消息发送给绑定交换机的所有队列
direct:把消息发送给绑定交换机的所有队列中能匹配routingkey的队列中
topic:把消息发送给绑定交换机的所有队列中能匹配reoutingkey的队列,绑定的时候可以使用通配符(#匹配多个词,匹配单个)
4,RabbitMQ什么情况下会出现消息丢失,如何解决
1,自动签收,消费失败 解决:改为手动,在消费成功后再手动签收。
2,没有持久化,MQ进程挂掉,数据丢失 解决:持久化
3,发送者消息投递失败 解决:投递回调(1,重试;2,日志记录;3,短信警报;4,发送消息持久化到DB+定时任务重试,设置最大重试次数)
5,RabbitMQ如何防止重复消费消息:幂等
什么是幂等性?
幂等性是指同一个操作无论请求多少次,其结果都相同。
幂等操作实现方式有:
1,操作之前在业务方法进行判断如果执行过了就不在执行。
2,缓存所有请求和处理的结果,已经处理的请求则直接放回结果
3,在数据库中加一个状态字段(未处理,已处理),数据操作时判断未处理时再处理
幂等性:
产生原因:网络延迟传输中,会造成进行MQ重试中,在重试过程中,可能会造成重复消费;
解决办法:在生产者生产消息的时候,都要给消息加一个messageid作为消息的唯一值就是为了消息方避免重复消费。
使用全局Mwssageid判断消费方使用同一个,解决幂等性。
生产端设置消息ID 消费端判断ID 基于全局消息id区分消息,解决幂等性。
6,PabbitMQ的交换机分为几类?有什么区别
fanout(分发模式): 把消息发送给绑定交换机的所有队列
direct(默认模式):把消息发送给绑定交换机的所有队列中匹配routingkey的队列,默认采用轮询的方式进行消息发送。
topic:把消息发送给绑定交换机的所有队列中能匹配routingkey的队列,绑定的时候可以使用通配符(#匹配多个词,匹配单个)
headersecehanges:不处理路由键,而是根据发送消息内容中的headers属性进行匹配,性能很差,此类型几乎用不到。
7,springboot整合MQ的大致步骤
导入依赖
yml配置连接信息,手动签收,消息并发数,回调设置
配置类:交换机,队列,绑定 rabbittemplate配置json转换器,监听工厂配置json转化器,
发送者:rabbittmplate.converAndsend 设置回调函数
编写回调:发送者消息投递到交换机回到,交换机投递到队列回调
消费者:通过监听标签,监听队列,方法处理消息,方法参数列表(@payload对象,通过message)
8,RabbitMQ有哪些重要的角色?
rabbitMQ中重要的角色有:生产者,消费者 和代理:
生产者:消息的创建者,负责创建和推送数据到消息服务器;
消费者:消息的接收方,用于处理数据和确认消息;
代理:就是rabbitMQ本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。
9,rabbitMQ有哪些重要的组件?
connectFavtory(连接管理器):应用程序与rabbit之间建立的管理器程序代码中使用。
channel(信道):消息推送使用的通道。
exchange(交换机):用于接受,分配消息。
queue(对列):用于储存生产者的消息。
qoutingKey(路由键):用于把生产者的数据分配到交换机上。
bindingkey(绑定键):用于把交换器的消息绑定到队列上。
10,RabbitMQ要保证消息持久化成功的条件有哪些?
消息持久化:消息推送投递模式必须设置持久化,diliverymode设置为2(持久)。
交换机持久化:消息已经到达持久化交换机。
队列持久化:消息已经到达持久化队列。声明队列必须设置持久化duable设置为rtue
11,rabbitMQ怎么保证消息的稳定性?
提供了事务的功能。
通过将channel设置confirm(确认)模式。
12,rabbitMQ怎么避免消息丢失?
把消息持久化磁盘,保证服务器重启消息不丢失。
每个集群中至少有一个物理磁盘,保证消息落人磁盘。
13,rabbitMQ持久化有什么缺点?
持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量,可尽量使用ssd硬盘来缓存吞吐量的问题。
14,rabbitMQ中vhost的作用是什么?
vhost:每个rabbitMQ都能创建很多vhost,我们称之为虚拟主机,每个虚拟主机其实都是mini版的rabbitmq,它拥有自己的队列,交换机和绑定,拥有自己的权限机制。
15,rabbitMQ怎么实现延迟队列,使用场景?
延迟队列的实现有两种:
通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能
使用rabbitMQ-delayed-message-ecahange插件实现延时功能。
使用场景:
订单成功后,在30分钟内没有支付,自动取消订单。
外卖平台发送订餐通知,下单成功后60s给用户推送短信。
如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存
淘宝新建商户一个月还没有上传商品信息,将冻结商铺等。
也可以用Redis实现延迟队列;
16,rabbitMQ集群有什么用?
集群主要有以下两个用途;
高可用:某个服务器出现问题,整个rabbitMQ还可以继续使用;
高容量:集群可以承载更多的消息量。
17,rabbitMQ节点的类型有哪些?
磁盘节点:消息会存储到磁盘。
内存节点:消息都存储在内存中,重启服务器消息丢失,性能高与磁盘类型。
18,rabbitMQ集群搭建需要注意哪些问题?
各节点之间使用“-link”连接,此属性不能忽略。
各节点使用的erlangcookie值必须相同,此值相当于“秘钥”的功能,用于各节点的认证。整个集群中必须包含一个磁盘节点。
19,rabbitMQ每个节点是其他节点的完整拷贝吗?为什么?
不是,原因有以下两个:
存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;
新能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多的是保持和单节点相同的新能甚至更糟。
20,rabbitMQ集群中唯一一个磁盘节点崩溃了会发生什么情况?
如果唯一磁盘的磁盘节点崩溃了,不能进行以下操作:
不能创建队列
不能创建交换机
不能创建绑定
不能添加用户
不能更改权限
不能添加和删除集群节点
唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西。
21,rabbitMQ对集群节点停止顺序有要求吗?
rabbitMQ对集群的停止是顺序是有要求的,应该先关闭内存节点,最后在关闭磁盘节点,如果顺序恰好相反的话,可能会造成消息的丢失。