1、什么是消息中间件?
消息中间件属于分布式系统中一个子系统,主要关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。
2、为什么需要用消息中间件?
低耦合,不管是程序还是模块之间,使用消息中间间进行间接通信;
异步通信能力,是的子系统之间无需等待
伸缩性:不断通过向集群中加入服务器的手段来缓解不断上升的用户并发访问的压力和不断增长的数据存储需求
扩展性:新增一个功能,无需改动之前的功能上新增一个新的功能
3、和RPC有啥区别?
消息中间件调用过程
RPC调用过程
依赖性;同步性;
相同点:消息中间件和RPC都是分布式下面的通信方式;
不同点:消息中间件属于异步方式;弱依赖,系统级别、模块级别的通信;RPC是同步方式,强依赖,对象级,函数级通信,让远程调用本地方法。
4、消息中间件有哪些使用场景?
1)异步处理
常见用户注册功能,需要发送注册邮件和注册短信。
传统的做法:1、串行的方式;2、并行的方式
将注册信息写入数据库后,发送注册邮件,发送注册短信。以上三个方法调用完成后,返回给客户端
串行方式完成功能需要150ms
并行方式将注册信息写入数据库,然后同时启动两个线程发送注册邮件和注册短信;则需要100ms;
引入消息中间后,则将用户注册信息写入数据库,注册邮件和注册短信写入消息队列后,直接返回,因此写入的消息队列的速度很快,基本上可以忽略。则返回给客户端的时间为55ms。比串行的提升了3倍,比并行提升了两倍。
2)应用解耦
场景用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。
1)假如库存系统无法访问,则订单减库存将失败,从而导致订单失败
2)订单系统和库存系统耦合
订单系统正常下单后,将消息写入队列就不在关心后续操作了。库存系统自行处理消费消息。实现了订单系统和库存系统之间的应用解耦。
3)流量削峰
用户的请求,服务器接收后,首先写入消息队列。秒杀业务根据消息队列中的请求信息,在做后续的处理。
4)日志处理
日志处理解决大量日志传输的问题。
日志采集客户端,负责日志数据采集,定时写入kafka队列;kafka消息队列,负责日志数据的接收、存储和转发;日志处理应用,订阅并消费Kafka队列中的日志数据。
5)消息通信
消息通讯比如实现点对点消息队列,或者聊天室
点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。
聊天室通讯:客户端A,客户端B同时订阅一个主题,进行消息发布和接收。实现聊天室的效果。
5、常见消息中间件比较
5、1如何进行技术选型
用户访问量不大的情况下,可以考虑ActiveMQ,比较贴近java工程师的习惯。
rabbitMQ使用最多,管理界面也比较丰富,但是erlang语言不可控。
rocketMQ技术绝对有自信的可以使用。
kafka大数据行业,日志采集处理,实时计算