一、RabbitMQ应用场景
- 异步:串行方式有些耗时操作将严重影响接口性能,如果用户注册模块,需要获取短信或者邮件验证码,这个操作是比较耗时的,无需等验证码发送成功才将接口返回,可以使用MQ的方式异步发送通知
- 解耦:比如一个订单系统,下单要调用库存通知库存系统,下单完成要通知财务系统进行扣款,按照传统的开发模式,通过接口调用方式,会将多个系统功能耦合在一起,使用MQ之后,通过通知订阅方式,即使财务系统出现故障也不会影响订单系统,消息保存在MQ中,等财务系统恢复正常之后再从MQ中拉取消息进行消费
- 削峰:这种场景一般出现在秒杀活动中,秒杀活动一般会因为流量过大而致使应用宕机,这时在中间加入一个RabbitMQ,将请求全部挤压到MQ中,然后将获取消息模式由push自动推送方式改为pull手动拉取方式,应用每秒能处理多少请求,就从MQ中pull多少请求
- 参考:RabbitMQ的应用场景
二、RabbitMQ优缺点
- 优点:就是上述所说的三种应用场景:异步、解耦和削峰
- 缺点:
- 1、系统可用性降低:如果MQ挂掉,会直接导致系统不可用
- 2、系统复杂度提高:引入MQ,需要考虑MQ的诸多问题,比如幂等性,消息可靠性等等
- 3、一致性问题:比如一个订单系统需要给库存系统、商品系统和财务系统发送消息,但是库存系统发送成功,其他两个系统消息发送失败了,就会导致数据的不一致
三、如何保证RabbitMQ的高可用
- 针对RabbitMQ的高可用问题,RabbitMQ提供了两种集群模式
- 1、普通集群模式:这种集群模式只有一台机器保存了真正的数据,其他机器保存的是元数据,比如存储数据的机器的ip地址,当用户请求到节点A,但A中并没有保存数据,需要通过节点A上的元数据找到保存真实数据的节点,这种集群模式无法从根本上解决高可用问题,如果保存数据的那台机器宕机,数据就丢失了,于是,有了下面这种集群模式
- 2、镜像集群模式:当生产者注册到消息队列上来时,会将数据同步上去,于是每台机器都保存了数据,消费者可以在任意一台机器上消费,数据都是一样的,一台机器数据丢失也不会影响应用的使用,这样就解决了普通集群模式的问题
四、如何保证RabbitMQ消息的幂等性(即不被重复消费)
五、如何保证RabbitMQ消息的可靠性(即消息不被丢失)
- 可靠性分为三个阶段,生产者发送消息到MQ,MQ接收消息,MQ将消息推送给消费者,这三个阶段均有可能造成消息的丢失
六、如何保证RabbitMQ消息的顺序性(即按顺序消费)
参考消息中间件MQ与RabbitMQ面试题
七、除了RabbitMQ,你还了解其他的MQ吗
八、请讲一下RabbitMQ从接收消息到将消息分发到对应客户端内部的执行流程
- 整个过程分为生产者发送消息和消费者接收消息两个过程
- 生产者发送消息(消息投递)
- 1、生产者请求连接broker,然后建立连接产生Connection,并开启信道Channel
- 2、生产者声明交换机exchange,并设置交换机类型,设置是否持久化
- 3、生产者声明队列Quenue,并将队列与交换机通过路由键routingKey绑定起来
- 4、生产者将消息发送至broker,包括交换机和路由键
- 5、生产者根据交换机和路由键匹配存放消息的队列,如果找到,将消息压入队列中,如果找不到,根据用户配置判断直接丢弃消息还是退回
- 6、关闭信道、关闭连接
- 消费者接收消息(消息接收)
- 1、消费者请求连接到broker,建立连接Connection,并开启信道Channel
- 2、消费者请求broker消费对应队列的消息,并可能设置回调函数
- 3、等待broker回应,消费者接收消息
- 4、消费者正确消费完,向broker发送ack命令
- 5、broker将对应消息移除
- 6、关闭信道,关闭连接
- 参考rabbitmq消息投递接收流程
posted @
2021-05-13 14:50
沐晨烟雨
阅读(
196)
评论()
收藏
举报