消息中间件

106 阅读3分钟

一.中间件技术

1.是什么

2.为什么用

3.不同架构的中间件

<1>分布式消息中间件

image.png

<2>其他中间件

image.png

二.消息中间件

1.是什么

负责数据的传递,存储,和分发消费,存储和分发的过程遵循AMQP协议

2.为什么用

异步处理(mq和多线程)、
实现解耦、
流量削峰(实现抗高并发)

3.消息中间件的核心组成部分

<1>消息的协议

AMQP协议,高级消息队列协议
特性:支持分布式事务,消息的持久化支持,高性能高可靠的支持

<2>消息的持久化机制

消息队列持久化

<3>消息的分发策略

image.png

<4>消息的高可用,高可靠

<5>消息的容错机制

4.rabbitmq

<1>服务器安装

[root@userAlex rabbitmq]# rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
[root@userAlex rabbitmq]# yum install -y socat
[root@userAlex rabbitmq]# rpm -Uvh rabbitmq-server-3.8.14-1.el7.noarch.rpm
[root@userAlex rabbitmq]# yum install rabbitmq-server -y

image.png

<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响应给客户端

image.png

<2>异步设计

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

image.png

<3>异步发送短信分析

image.png

3.mq与与多线程实现异步的区别

4.mq如何保证消息不丢失

5.mq如何避免消息堆积的问题

6.mq如何保证消息顺序一致性的问题

7.mq如何保证消息幂等的问题