RabbitMQ1:初识MQ

news/2024/11/24 7:36:30/

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

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

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

目录

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

1、举例:余额支付

2、优点

3、缺点

①拓展性差

②性能下降

③级联失败

4、总结

二、异步调用

1、异步调用的三个角色

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

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

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

举例:

类比:

2、优点

①解除耦合,拓展性强

②无需等待,性能好

③故障隔离

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

3、总结

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

MQ%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B-toc" style="margin-left:0px;">三、MQ技术选型

MQ%EF%BC%9F-toc" style="margin-left:40px;">1、什么是MQ

MQ%EF%BC%9F-toc" style="margin-left:40px;">2、选用什么类型的MQ


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

1、举例:余额支付

2、优点

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

3、缺点

①拓展性差

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

②性能下降

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

③级联失败

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

4、总结

二、异步调用

1、异步调用的三个角色

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

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

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

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

举例:

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

类比:

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

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

2、优点

①解除耦合,拓展性强

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

②无需等待,性能好

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

③故障隔离

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

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

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

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

3、总结

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

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

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

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

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

MQ%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B">三、MQ技术选型

MQ%EF%BC%9F">1、什么是MQ

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

        举例:

        

MQ%EF%BC%9F">2、选用什么类型的MQ

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

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


http://www.ppmy.cn/news/1549483.html

相关文章

python安装包中的一些问题(一):conda list 已经安装的包为啥在spyder pip list中没有?

出现这种情况的原因可能是因为你在 Spyder 中运行的 Python 环境与 Conda 环境不同,导致它们各自有各自的包列表。以下是一些可能的原因和解决方法: 1. Spyder 使用的 Python 环境与 Conda 环境不同 在 Conda 环境中安装的包,只会在该环境内…

2024年11月22日Github流行趋势

项目名称:twenty 项目维护者:charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael 项目介绍:正在构建一个由社区驱动的现代Salesforce替代方案。 项目star数:22,938 项目fork数:2,413 项目名称&#xff1…

首次实现!在Docker容器中运行macOS项目,自动化下载与Web体验

# 在 Docker 容器中运行 macOS 项目 ## 项目简介 该项目旨在实现在 Docker 容器中运行 macOS 系统的功能。通过 KVM 加速和基于 Web 的查看器,用户可以在 Docker 环境中体验 macOS 操作系统。此外,该项目还提供自动下载功能,方便用户获取和使…

搜维尔科技:多画面显示3D系统解决方案,数据孪生可视化大屏3D展示技术

集成多画面系统 集成多画面系统解决方案 1.适合多个用户的紧凑型入门级解决方案 2.会议室功能、审批功能、3D模型讨论等多种使用可能性 3.配有组合设备,方便整合 CAVE 多画面显示系统 1.专业的大屏幕多画面解决方案 2.墙壁、天花板和地板三面CAVE 3.专为沉浸…

了解大模型:开启智能科技的新篇章

在当今科技飞速发展的时代,人工智能(AI)已经成为推动社会进步的重要力量。而在AI的众多技术分支中,大模型(Large Model)以其强大的数据处理能力和卓越的性能,正逐渐成为研究和应用的热点。本文旨在科普大模型的基本概念、与大数据的关系以及与人工智能的紧密联系,帮助读…

生产制造领域的多元化模式探索

在当今全球化和信息化的时代背景下,生产制造领域正经历着前所未有的变革。随着消费者需求的多样化、市场竞争的加剧以及技术的不断进步,传统的生产制造模式已经难以满足现代企业的需求。因此,多种生产制造模式应运而生,以适应不同…

神经网络问题之二:梯度爆炸(Gradient Explosion)

梯度爆炸(Gradient Explosion)是神经网络训练过程中常见的一个问题,它指的是在反向传播过程中,梯度值变得非常大,超出了网络的处理范围,从而导致权重更新变得不稳定甚至不收敛的现象。 一、产生原因 梯度爆…

界面控件DevExpress WPF中文教程:网格视图数据布局的列和卡片字段

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…