消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性的架构,是大型分布式系统中不可缺少的中间件
使用场景
异步处理
串行方式:用户注册->写入数据库->发送注册邮件->发送注册短信
并行方式:用户注册->写入数据库->发送邮件并且发送短信
消息队列:用户注册->写入数据库->写入消息队列->发送邮件和短信的消费者异步读取消息队列,写入消息队列即将结果返回给客户端
流量大的时候redis并不可靠
应用解耦
用户下单后,订单系统需要通知库存系统
传统方式:订单系统调用库存系统的接口
消息队列:
订单系统:当用户下单后,将订单内容写入消息队列,返回订单下单成功
库存系统:订阅下单的消息,采用拉/推的方式获取下单的信息,库存系统根据下单的信息,进行库存操作
流量削锋
秒杀活动,因为流量过大,导致流量暴增
传统方式:突然接受来自前端大量订单请求
消息队列:在应用前端加入消息队列
用户请求,服务器接收后首先写入消息队列,超过最大数量,直接抛弃用户请求或者跳转到错误页面,
秒杀业务根据消息队列的信息进行相关处理
日志处理
解决大量日志传输的问题
日志采集客户端负责日志数据采集写入Kafka
Kafka消息队列负责日志数据的接受、存储和转发
日志处理应用:订阅并消费Kafka队列中的日志数据
生产环境中,使用较多的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ