JAVA-消息队列使用的场景

消息队列场景:异步处理,应用解耦,流量削锋,日志处理,消息通讯

①异步处理:
场景:用户进行注册,需要发送邮件和发送短信。传统的处理方式:1.串行 2.并行

1.串行: 将注册信息写入数据库成功后,发送注册邮件,再发送注册短信,以上三个步骤全部完成,才会返回给客户端。
在这里插入图片描述

2.并行: 将注册消息写入到数据库成功后,发送注册邮件的同时也发送注册短信。三个任务完成后,再返回给客户端。与串行相比,减少了后面发送两步的处理时间。
在这里插入图片描述

不考虑其他因素:
如图所示:串行处理时间花费了150ms,并行处理时间花费了100ms。

在引入消息队列后,将不是必须的业务逻辑,进行异步处理。
在这里插入图片描述

②应用解耦:
场景:用户下单后,订单系统需要通知库存系统。传统做法:订单系统调用库存系统的接口。
在这里插入图片描述
缺点:

  • 假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。
  • 订单系统和库存系统耦合。

利用消息队列来处理上述问题:
在这里插入图片描述

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列, 返回用户订单下单成功。
  • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
  • 假如:在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息队列就不再关系后续其他操作了。实现订单系统与库存系统的应用耦合。

③流量削锋:
流量削锋一般在秒杀活动或者团抢活动出来容易出现 。
场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

  • 可以控制活动的人数
  • 可以缓解短时间内高流量压垮应用

在这里插入图片描述

  • 用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误界面。
  • 秒杀业务根据消息队列中的请求信息,再做后续处理。

④日志处理:
日志处理是指将消息队列用于日志处理中,比如kafka的应用,解决大量日志传输的问题。
在这里插入图片描述

  • 日志采集客户端:负责采集日志数据,并定时买入kafka队列。
  • kafka消息队列:负责日志数据的接收、存储和转发。
  • 日志处理应用:订阅并消费kafka队列中的日志数据。

新浪kafka日志处理机制:
在这里插入图片描述

  • kafka:接收用户日志的消息队列。
  • logstash:做日志的解析,把日志解析成json格式给Elasticsearch。
  • Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。
  • Kibana:基于Elasticsearch的数据可视化组件,超强的数据能力是众多公司选择ELK stack的原因。

⑤消息通讯:
消息通讯是指一般消息队列都内置了高效的通信机制,因此也可以单纯的用来消息通讯。比如实现点对点消息队列,或者聊天室。

点对点通讯:
在这里插入图片描述
客户端A和客户端B使用同一个消息队列进行通信。

聊天室通讯:
在这里插入图片描述
客户端A,客户端B,,客户端N都订阅了同一个消息队列,用于消息的发布和接收,实现聊天室通讯。

https://www.cnblogs.com/ruiati/p/6649868.html (原文,非常好)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值