【Java-RabbitMQ】学习总结

本文详细介绍了消息队列在Java开发中的应用,重点讨论了RabbitMQ的使用场景,如异步处理、解耦和削峰,并分析了其点对点模式与发布/订阅模式。此外,还探讨了RabbitMQ的潜在弊端和如何进行技术选型。文中还提到了重复消费、顺序消费以及分布式事务的解决方案,强调了接口幂等的重要性。
摘要由CSDN通过智能技术生成

一、消息队列

1.1 使用场景

  • 三个经典场景:异步、削峰、解耦
1-异步
  • 1 场景 下单系统
    1)简单业务:
    下单 -> 付钱,流程就走完了。
    2)升级:
    +优惠券系统 -> 流程里面多100ms去扣减优惠券。
    +积分系统 -> 流程里面多了200ms去增减积分。
    +下单成功后给用户发短信 ->100ms去发个短信。

    3)真正的下单流程涉及的系统绝对在10个以上(主流电商),越大的越多。
    在这里插入图片描述
    Tip:我之前在的电商老东家要求所有接口的Rt(ResponseTime响应时间)在200ms内,超出的全部优化,我现在所负责的系统QPS也是9W+就是抖动一下网络集群都可能炸锅那种,RT基本上都要求在50ms以内。

  • 2 解决
    1)分析:
    链路长就会慢,可以将上面的流程其实可以同时做,你支付成功后,我去校验优惠券的同时我可以去增减积分啊,还可以同时发个短信啊。—>异步完成

你对比一下是不是发现,这样子最多只用100毫秒用户知道下单成功了,至于短信你迟几秒发给他他根本不在意是吧。

在这里插入图片描述

2-解耦
  • 异步,那我用线程,线程池去做不是一样的么?
  • 1 线程池的问题
    1)耦合问题:
    一个订单流程,你扣积分,扣优惠券,发短信,扣库存。。。等等这么多业务要调用这么多的接口,每次加一个你要调用一个接口然后还要重新发布系统
    2)问题排查:
    问题排查也麻烦,流程里面随便一个地方出问题搞不好会影响到其他的点,小伙伴说我每个流程都try catch不就行了,相信我别这么做,这样的代码就像个定时炸弹💣,你不知道什么时候爆炸,平时不炸偏偏在你做活动的时候炸,你就领个P0故障收拾书包提前回家过年吧。

Tip:P0—PN 是互联网大厂经常用来判定事故等级的机制,P0是最高等级了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值