Java ActiveMQ:(二)消息服务的应用场景
- 消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。
1.异步处理
1.1 用户注册
用户注册流程:
- 注册处理以及写数据库
- 发送注册成功的手机短信
- 发送注册成功的邮件信息
- 如果用消息中间件:则可以创建两个线程来做这些事情,直接发送消息给消息中间件,然后让邮件服务和短信服务自己去消息中间件里面去取消息,然后取到消息后再自己做对应的业务操作。就是这么方便
2.应用的解耦
2.1 订单处理
生成订单流程:
- 在购物车中点击结算
- 完成支付
- 创建订单
- 调用库存系统
- 订单完成后,订单系统并不去直接调用库存系统,而是发送消息到消息中间件,写入一个订单信息。库存系统自己去消息中间件上去获取,然后做发货处理,并更新库存,这样能够实现互联网型应用追求的快这一个属性。而库存系统读取订单后库存应用这个操作也是非常快的,所以有消息中间件对解耦来说也是一个不错的方向
3.流量的削峰
3.1 秒杀功能
秒杀流程:
- 用户点击秒杀
- 发送请求到秒杀应用
- 在请求秒杀应用之前将请求放入到消息队列
- 秒杀应用从消息队列中获取请求并处理
- 比如,系统举行秒杀活动,热门商品。流量蜂拥而至 100 件商品,10 万人挤进来怎么办?10 万秒杀的操作,放入消息队列。秒杀应用处理消息队列中的 10 万个请求中的前 100 个,其他的打回,通知失败。流量峰值控制在消息队列处,秒杀应用不会瞬间被怼死.