消息队列本质是一个队列,但要满足高并发,高吞吐,高可用
概念解释
- 官方说法是,MQ(全称Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式,队列就是一个消息容器
- 现实使用中,我们将消息队列称之为中间件,从它的名字就可以看出,消息队列不存储消息内容的本身,它只是消息的搬运工
异步通信:MQ的引入,更新用户积分、通知商家、更新用户标签这些步骤不再是串行的了,而是变成了异步执行,这减少了订单支付的整体耗时,提升了订单系统的吞吐量
RPC和MQ的区别 MQ特点
面向数据、生产者与消费者、有缓冲节点、异步、系统级/模块级通信
MQ适用场景
1、消息的发送者和消费者需要解耦(发送者和消费者都不再直接交互,而是通过中间件间接交互,实现了解耦)
2、发送者并不明确谁是消费者(也是因为发送者和消费者不进行直接交互)
3、发送者并不关心谁来消费信息(理由同上)
4、各个消费者可以从不同的角度入手处理消息
5、消费者的处理结果也不返回给发送者
6、消息的发送和处理是异步的
7、消息的关注者不止一个
MQ使用总结 也就是计算结果不要求立即返回给消息的发送者时,应该使用MQ,例如日志服务、业务监控服务
RPC特点
面向动作、请求响应模式、同步、对象级/函数级通信
RPC适用场景
1、客户端必须明确要调用哪个服务器
2、调用需要立即得到返回结果
3、架构简单
RPC使用总结
如果服务的调用需要在短期内返回结果时,并且同一个请求的关注者只有一个,这个时候就应该使用RPC
各种消息队列:
kafka:分布式的,分区的,多副本的日志提交服务,在高吞吐场景下发挥出色
RocketMQ:低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可拓展性,在一些实时场景中运用较广
Pulsar:下一代云原生分布式消息流平台,集消息,存储,轻量化函数式为一体,采用存算分离的架构设计
BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的kafka集群。