自学内容网 自学内容网

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,因为它十分可靠。


原文地址:https://blog.csdn.net/qq_63981644/article/details/143879482

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!