一、什么是消息中间件
消息中间件基于队列模型实现异步/同步传输数据。
作用:可以实现支撑高并发、异步、解耦、流量削峰。
优点:由于RabbitMQ是erlang语言开发的,具有天生抗高并发的性能,吞吐量达到万级。
1、什么是异步
将一个任务中比较耗时的业务逻辑代码使用异步的方式去执行,可以提高响应速度。
2、什么是解耦
耦合:所谓耦合,指系统各功能、模块之间具有依赖性,依赖性越强、耦合度就越高,维护成本也就越高。
解耦:解耦就是解除系统各模块之间的关系。就是A模块的代码不要写在B模块中,可以通过接口或其他形式进行调用。
3、什么是流量削峰
我们都知道服务器的处理资源是有限的,所以出现峰值的时候,容易导致服务器宕机,用户无法访问的情况出现。所以流量消峰就是可以缓冲瞬时流量,削弱流量的峰值。
4、中间件如何实现抗高并发
生产者将消息(即任务)存放在中间件的队列中,消费者不是一次性全部队列中的消息消费掉,而是根据自身情况进行消费,所以能实现抗高并发。默认的情况下是取出一条消息。
缺点:存在延迟的问题.
二、传统的http请求存在哪些缺点
1、用户体验不好
Http请求基于请求与响应的模型,属于同步线程,在高并发的情况下,客户端发送大量的请求达到服务器端有可能会导致我们服务器端处理请求堆积。请求堆积,响应超时。
2、高并发,服务器崩溃
Tomcat服务器处理每个请求都有自己独立的线程,如果超过最大线程数会将该请求缓存到队列中,如果请求堆积过多的情况下,有可能会导致tomcat服务器崩溃的问题。所以一般都会在nginx入口或网关实现限流,整合服务保护框架。
3、幂等性问题
响应超时,引发重试,产生幂等性问标题。http请求处理业务逻辑如果比较耗时的情况下,容易造成客户端一直等待,阻塞等待过程中会导致客户端超时发生重试策略,有可能会引发幂等性问题。
4、注意事项:接口是为http协议的情况下,最好不要处理比较耗时的业务逻辑,耗时的业务逻辑应该单独交给多线程或者是mq处理。
三、MQ
应用场景:
场景1:异步解耦&#