一.中间件技术
1.是什么
2.为什么用
3.不同架构的中间件
<1>分布式消息中间件

<2>其他中间件

二.消息中间件
1.是什么
负责数据的传递,存储,和分发消费,存储和分发的过程遵循AMQP协议
2.为什么用
异步处理(mq和多线程)、
实现解耦、
流量削峰(实现抗高并发)
3.消息中间件的核心组成部分
<1>消息的协议
AMQP协议,高级消息队列协议
特性:支持分布式事务,消息的持久化支持,高性能高可靠的支持
<2>消息的持久化机制
消息队列持久化
<3>消息的分发策略

<4>消息的高可用,高可靠
<5>消息的容错机制
4.rabbitmq
<1>服务器安装
[root@userAlex rabbitmq]
[root@userAlex rabbitmq]
[root@userAlex rabbitmq]
[root@userAlex rabbitmq]

<2>web管理界面
[root@userAlex sbin]# pwd
/usr/sbin
[root@userAlex sbin]# ./rabbitmq-plugins enable rabbitmq_management
<3>docker安装rabbitmq
[root@userAlex rabbitmq]# docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFALUT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:managment
三.springboot整合mq
四.面试mq
1.开发中哪里用到了redis,mq,微服务,为什么要用
使用mq异步发送优惠券
使用mq发送短信
使用mq异步扣库存
使用mq异步审核贷款金额
总之把耗时的代码操作,交给mq异步实现接口
我在之前公司的时候,刚去的时候,公司的架构比较单一,采用的就是单体结构,所有的业务都推积在一起,后来公司业务多的时候,公司就把项目做了一些分裂,变成了一个分布式的架构,也就是把系统进行了一个拆分,拆分的过程中,因为不同的模块之间要做一个协同沟通,所以当时公司就用了消息队列,选型的时候选了rabbitmq,我自己使用rabbitmq的感受呢,因为它是一个分发的异步多线程的机制,所以网站的性能就有一个成倍的提升;还有就是因为把服务进行了分裂,所以就做到了解耦。
就比如刚开始做订单业务的时候,要给用户发短信和emial,因为是代码是串行执行的,执行时间就比较慢, 后来优化的时候,也考虑了异步线程池,但是因为这个线程池还需要自己维护等等就比较麻烦,所以最后就用了rabbitmq这种异步的消息队列的方式,他会把下单变成生产者,发消息和email变成消费者,这样就实现了并行执行,不会阻塞,这时候下单就可以感觉到很快,性能有很多的提升
2.举例说明mq使用
<1> 会员注册业务逻辑
服务器端接口如果是同步设计:
我的接口会走一个会员注册的流程
用户发送请求到服务器端
先在db中插入一条数据
再发一个异步的短息提醒一下
再异步的发送一个优惠券
服务器端需要7s响应给客户端

<2>异步设计
用户发送请求到服务器端
现在db中插入一条数据
服务区单独开启一条线程发送短信,发送优惠券
(也就是只要用户把请求发送到服务器端,服务器端把数据插入数据库表中的时候,直接就给客户端发送响应;此时服务器会单独开启一条线程发送短信)

<3>异步发送短信分析

3.mq与与多线程实现异步的区别
4.mq如何保证消息不丢失
5.mq如何避免消息堆积的问题
6.mq如何保证消息顺序一致性的问题
7.mq如何保证消息幂等的问题