MQ介绍使用,以及相关面试题

本文详细介绍了MQ在异步处理、解耦和流量削峰中的应用,涉及RabbitMQ、Docker的安装与管理,以及交换机和队列的工作原理,还探讨了SpringBoot如何整合RabbitMQ,以及死信队列在保证消息不丢失中的作用。
摘要由CSDN通过智能技术生成

目录

一,MQ的应用场景

1.什么是MQ?

2.常见的mq产品

3.作用(面试题) 为什么用MQ?

3.1,异步处理

​编辑3.2、应用解耦 

3.3、流量削峰

                                                                                                                                                                     

二, Docker 安装                                                                                         

1.官方镜像

2.Docker运行,并设置开机自启动

三, 交换机与队列的介绍

1.交换机类型(面试题)

1.1 Direct Exchange

1.2 Fanout Exchange

1.3 Topic Exchange

四,SpringBoot整合RabbitMQ

五,死信队列

1.(面试题):你们是如何保证消息不丢失的?

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           


一,MQ的应用场景

1.什么是MQ?

MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信,解耦。

2.常见的mq产品

RabbitMQ、RocketMQ、Kafka

3.作用(面试题) 为什么用MQ?

3.1,异步处理

场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式

串行方式: 将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西.

并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。

消息队列:假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回.

3.2、应用解耦 

场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.

这种做法有一个缺点:

当库存系统出现故障时,订单就会失败。 订单系统和库存系统高耦合. 引入消息队列

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,获取下单消息,进行拆订单操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失.

3.3、流量削峰

场景: 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。

作用:

1.可以控制活动人数,超过此一定阀值的订单直接丢弃.

2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

                                                                                                                                                                     

二, Docker 安装                                                                                         

1.官方镜像

该版本镜像包含用户操作界面



2.Docker运行,并设置开机自启动

docker run -d --restart=always --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management

默认登录账户和密码 guest

三, 交换机与队列的介绍

1.交换机类型(面试题)

1.1 Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

然后当一个消息携带着路由值为abc,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值abc去寻找绑定值的队列。

1.2 Fanout Exchange

扇型(广播)交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

1.3 Topic Exchange

主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。

简单地介绍下规则:

* (星号) 用来表示一个单词 (必须出现的)

# (井号) 用来表示任意数量(零个或多个)单词

// *  代表两点之间一个占位单词  // #  代表后面所有,匹配所有

当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。

如果只有 # ,它就实现了扇形交换机的功能。

所以主题交换机也就实现了扇形交换机的功能,和直连交换机的功能

四,SpringBoot整合RabbitMQ

五,死信队列

1.(面试题):你们是如何保证消息不丢失的?

为了保证消息不丢失,我们使用了死信队列,

什么是死信?

1.死信就是在消息被拒绝,

2.消费者发生异常,超过重试次数,

3.消息Expiration的过期时长或TTL的过期时间,

4.消息队列达到最大容量时产生。

什么是死信队列?

死信队列就是 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值