什么是消息中间件

消息中间件基于队列模型实现异步/同步传输数据

作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。

传统的http请求存在那些缺点

 

1.Http请求基于请求与响应的模型,在高并发的情况下,客户端发送大量的请求达到服务器端有可能会导致我们服务器端处理请求堆积。

2.Tomcat服务器处理每个请求都有自己独立的线程,如果超过最大线程数会将该请求缓存到队列中,如果请求堆积过多的情况下,有可能会导致tomcat服务器崩溃的问题。所以一般都会在nginx入口实现限流,整合服务保护框架。

 3.http请求处理业务逻辑如果比较耗时的情况下,容易造成客户端一直等待,阻塞等待过程中会导致客户端超时发生重试策略,有可能会引发幂等性问题。

 

注意事项:接口是为http协议的情况下,最好不要处理比较耗时的业务逻辑,耗时的业务逻辑应该单独交给多线程或者是mq处理。

 

Mq应用场景有那些

  1. 异步请求接口
  2. 比较耗时操作

为什么需要使用mq

可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。

 

同步发送http请求

客户端发送请求到达服务器端,服务器端实现会员注册业务逻辑,

1.insertMember() --插入会员数据  1s

2.sendSms()----发送登陆短信提醒 3s

3.sendCoupons()----发送新人优惠券  3s

总共响应需要6s时间,可能会导致客户端阻塞6s时间,对用户体验

不是很好。

 

多线程与MQ方式实现异步?

 

互联网项目:

客户端 安卓/IOS

 

服务器端:php/java

最好使用mq实现异步

 

多线程处理业务逻辑

 

用户向数据库中插入一条数据之后,再单独开启一个线程异步发送短信和优惠操作。

客户端只需要等待1s时间

优点:适合于小项目 实现异步

缺点:有可能会消耗服务器cpu资源资源

Mq处理业务逻辑

 

先向数据库中插入一条会员数据,让后再向MQ中投递一个消息,MQ服务器端在将消息推送给消费者异步解耦处理发送短信和优惠券。

Mq与多线程之间区别

 

MQ可以实现异步/解耦/流量削峰问题;

多线程也可以实现异步,但是消耗到cpu资源,没有实现解耦。

 

Mq消息中间件名词

 

Producer 生产者:投递消息到MQ服务器端;

Consumer  消费者:从MQ服务器端获取消息处理业务逻辑;

Broker   MQ服务器端

Topic 主题:分类业务逻辑发送短信主题、发送优惠券主题

Queue 存放消息模型 队列 先进先出 后进后出原则 数组/链表

Message 生产者投递消息报文:json

 

主流mq区别对比

 

特性

ActiveMQ

RabbitMQ

RocketMQ

kafka

开发语言

java

erlang

java

scala

单机吞吐量

万级

万级

10万级

10万级

时效性

ms级

us级

ms级

ms级以内

可用性

高(主从架构)

高(主从架构)

非常高(分布式架构)

非常高(分布式架构)

功能特性

成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好

基于erlang开发,所以并发能力很强,性能极其好,延时很低管理界面较丰富

MQ功能比较完备,扩展性佳

只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。