当前位置: 首页 > article >正文

RabbitMQ1:初识MQ

欢迎来到“雪碧聊技术”CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!

目录

一、同步调用(一个一个来,串联的)

1、举例:余额支付

2、优点

3、缺点

①拓展性差

②性能下降

③级联失败

4、总结

二、异步调用

1、异步调用的三个角色

①消息发送者:投递消息的人,就是原来的调用方。

②消息代理:管理、暂存、转发消息,你可以把它理解成微信服务器。

③消息接收者:接收和处理消息的人,就是原来的服务提供方。

举例:

类比:

2、优点

①解除耦合,拓展性强

②无需等待,性能好

③故障隔离

④缓存消息,流量削峰填谷

3、总结

4、什么场景下,适合选用异步调用?

三、MQ技术选型

1、什么是MQ?

2、选用什么类型的MQ?


一、同步调用(一个一个来,串联的)

1、举例:余额支付

2、优点

        时效性强,前面的模块会一直等到后面的模块返回结果。

3、缺点

①拓展性差

     举例:存在业务耦合的问题,即:一开始支付服务模块调用了用户服务、交易服务两个模块,后期产品经理说需要加上通知服务、积分服务,此时我们就需要改代码。

②性能下降

     举例:假设每个模块耗时50毫秒,那么调用支付服务模块的耗时高达几百毫秒(因为支付服务调用了后面的几个模块),此时用户体验太差,性能下降。

③级联失败

      举例:假设交易服务模块出现故障,那么下面的一系列业务都会出问题,就好比一个电路,一个点发生断路,整个路都将断开。

4、总结

二、异步调用

1、异步调用的三个角色

异步调用方式其实就是基于消息通知的方式,一般包含三个角色。

①消息发送者:投递消息的人,就是原来的调用方。

②消息代理:管理、暂存、转发消息,你可以把它理解成微信服务器。

③消息接收者:接收和处理消息的人,就是原来的服务提供方。

举例:

        原来支付服务模块要调用交易服务来更新订单状态,现在学了异步调用,就不再调用交易服务了,而是发一条消息给消息代理,然后就什么都不管了,然后消息接受者监听到了消息,处理并返回结果给消息代理即可。

类比:

       之前外卖员会把外卖送到你手里,假设你正在上课,那么外卖员就必须一直在门口等着,等到你下课然后把外卖送到你手里。

        后来有了外卖柜(相当于消息代理),外卖员只需要把外卖放到外卖柜子里,然后就直接走了, 然后你找时间去外卖柜拿外卖就行了,此时外卖员和消费者没有关系,是解耦的,自己干自己的就行,都找这个外卖柜(消息代理)就行了。

2、优点

①解除耦合,拓展性强

        支付服务模块只需将支付消息发送给消息代理即可,后面添加什么业务模块,都和支付服务模块没关系,而是让消息代理监听一下就好。因为所有模块之间都不见面,而是都去找消息代理(外卖柜)。

②无需等待,性能好

        支付服务模块只需要将支付消息放到消息代理即可,然后就可以离开。

③故障隔离

        后面模块发生异常,和支付服务模块没关系,因为二者都不见面,而是以消息代理为中心。

④缓存消息,流量削峰填谷

        某一个时间段(比如双11)来了海量的支付消息,如果不采用异步调用,那么这些海量的支付消息就会直接打到交易服务、通知服务、积分服务上,可能导致模块崩溃,而平时可能支付消息就很少,就导致了消息流量是波形的,一会高一会低。

        而采用了异步调用,这些海量的支付消息就会被存入消息代理(消息代理容量巨大),然后后面自己再一点一点处理,此时消息流量就是平稳的。就好比村子里来洪水了,但是有一个巨大无比的缸,正好可以存住这些洪水,然后自己后期再一瓢一瓢清理掉就好了。

3、总结

        注意:broker,就是“消息代理”的意思。

4、什么场景下,适合选用异步调用?

         ①你对于对方的执行结果不关心,即成功/失败都对于我们的业务没有太大影响。比如:订单的状态更新(状态更不更新无所谓,钱到手里才是关键)

        ②查询业务就不能使用异步调用,因为查询结果是必须的,得不到无法开展后续业务。因此查询业务必须使用同步调用。

        ③调用链超长,调用时间特别慢的时候,应该改为异步调用。

三、MQ技术选型

1、什么是MQ?

        MQ(MessageQueue):中文意思就是消息队列,字面来看就是存放消息的队列,也就是异步调用中的Broker(消息代理)。

        举例:

        

2、选用什么类型的MQ?

        如果要追求可靠性,那就选择RabbitMQ;如果要选择吞吐量,那就选择Kafka。

        我们本次学习的就是RabbitMQ,因为它十分可靠。


http://www.kler.cn/a/407591.html

相关文章:

  • 动态反馈控制器(DFC)和 服务率控制器(SRC);服务率和到达率简单理解
  • 社团管理智能化:SpringBoot技术
  • 使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能
  • Redis最终篇分布式锁以及数据一致性
  • 网络爬虫——爬虫项目案例
  • C# .NET环境下调用ONNX格式YOLOV8模型问题总结
  • The Yarn application application_xxx_xxx doesn‘t exist in RM
  • jvm发展历程介绍
  • C语言教程指针笔记整理(二)
  • 怎么做好白盒测试?
  • 【MyBatis】useGeneratedKeyskeyProperty属性
  • 积分商品编辑规格里积分未会显问题处理
  • Bugku CTF_Web——my-first-sqli
  • 使用Python生成F分布表并导出为Excel文件
  • linux从0到1——shell编程7
  • WPF绑定Bind方法合集,实时更新
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-transformer.py
  • 麒麟网络负载均衡与高可用方案实践
  • 【数据结构OJ】【图论】货币套汇(图路径)
  • 十、事件类型(鼠标事件、焦点.. 、键盘.. 、文本.. 、滚动..)、事件对象、事件流(事件捕获、事件冒泡、阻止冒泡和默认行为、事件委托)
  • 【Python入门第七讲】列表(List)
  • Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
  • chinaskills_cloud_iaas.iso镜像
  • 数据库【锁】的分类
  • Typora+PicGo+云服务器搭建博客图床
  • Github 2024-11-23 Rust开源项目日报 Top10