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.mzph.cn/bicheng/61318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

父组件提交时让各自的子组件验证表格是否填写完整

项目场景: 提示:这里简述项目相关背景: 父组件中有三个表格,表格中时输入框,有些输入框是必填的,在父组件提交时需要验证这三个表格的必填输入框中是否有没填写的。 原因分析: 提示&#xff1a…

Siglus引擎 Unpack | 未完待续

前言 未完待续。 代码在这里:https://github.com/N0zoM1z0/SiglusEngine-Extract 以后随时会更新。() 因为我是选择直接逆向游戏引擎,在无源码,不hook的情况下硬逆Siglus…… 路漫漫。。。 read.sav 可以直接逆Sigl…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电(模拟电路)基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例:非接触式电笔案例:电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例:非接触…

linux 中mysql查看慢日志

1、到mysql容器,先登录到数据库,查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启,需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…

从0开始机器学习--Day30--异常检测算法

异常检测算法(Anomaly detection algorithm) 我们定义异常检测算法的输出,也写作,这里的每一项括号内代表的是每个特征都符合各自的高斯分布(也就是正态分布),代表均值,决定了模型的中心位置;代…

架构图解析:如何构建高效的微服务系统

在当今的数字化浪潮中,构建高效、灵活且可扩展的系统已成为企业的重要目标。微服务架构作为一种先进的软件设计模式,通过将复杂的应用程序分解为一系列小型、独立的服务,显著提升了系统的灵活性、可扩展性和维护性。本文将通过解析微服务系统…

排序排序的概念及其运用和选择排序

排序排序的概念及其运用和选择排序 7. 排序7.1 排序的概念及其运用7.2 选择排序算法——直接选择排序选择排序基本思想:直接选择排序选择排序原理参考程序 如何交换数据直接选择排序的特性总结: 7. 排序 7.1 排序的概念及其运用 排序:所谓排…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据,此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输,而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

【澜舟科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…

uni-app快速入门(十)--常用内置组件(下)

本文介绍uni-app的textarea多行文本框组件、web-view组件、image图片组件、switch开关组件、audio音频组件、video视频组件。 一、textarea多行文本框组件 textarea组件在HTML 中相信大家非常熟悉,组件的官方介绍见: textarea | uni-app官网uni-app,un…

Tomcat 如何管理 Session

Tomcat 如何管理 Session 我们知道,Tomcat 中每一个 Context 容器对应一个 Web 应用,而 Web 应用之间的 Session 应该是独立的,因此 Session 的管理肯定是 Context 级的,也就是一个 Context 一定关联多个 Session。 Tomcat 中主…

鸿蒙NEXT开发-用户通知服务的封装和文件下载通知

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

01 IP路由基础

一、路由器是怎么转发数据包 • 当数据包到达路由器之后,根据数据包的目的 IP 地址,查找 路由表,并根据路由表中相应的路由所指示出接口还有下一跳 指导数据包在网络中的转发。 • 如果路由器路由表没有路由怎么办? -------- 将数…

Android studio 呼叫盒app

一、权限文件 0.gradle切换国内源 #Fri Nov 08 15:46:05 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-8.4-bin.zip zipStoreBaseGRADLE_USER_HOME zipStorePathwrapper/dists1…

[Admin] Dashboard Filter for Mix Report Types

Background RevOps team has built a dashboard for sales team to track team members’ performance, but they’re blocked by how to provide a manager view based on sales’ hierarchy. Therefore, they seek for dev team’s help to clear their blocker. From foll…

2024年人工智能技术赋能网络安全应用测试:广东盈世在钓鱼邮件识别场景荣获第三名!

近期,2024年国家网络安全宣传周“网络安全技术高峰论坛主论坛暨粤港澳大湾区网络安全大会”在广州成功举办。会上,国家计算机网络应急技术处理协调中心公布了“2024年人工智能技术赋能网络安全应用测试结果”。结果显示,广东盈世计算机科技有…

Java进阶四-异常,File

异常 概念:代表程序出现的问题。 目的:程序出现了异常我们应该如何处理。 最高父类:Exception 异常分为两类 编译时异常:没有继承RuntimeException的异常,直接继承与Exception,编译阶段就会错误提示。运行时异常:RuntimeExc…

ERROR TypeError: AutoImport is not a function

TypeError: AutoImport is not a function 原因:unplugin-auto-import 插件版本问题 Vue3基于Webpack,在vue.config.js中配置 当unplugin-vue-components版本小于0.26.0时,使用以下写法 const { defineConfig } require("vue/cli-se…

Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)

作者:来自 Elastic Benjamin Trent 为什么我们选择花时间研究更好的二进制量化而不是在 Lucene 和 Elasticsearch 中进行生产量化。 我们一直在逐步使 Elasticsearch 和 Lucene 的向量搜索变得更快、更实惠。我们的主要重点不仅是通过 SIMD 提高搜索速度&#xff0…

检查课程是否有效

文章目录 概要整体架构流程技术细节小结 概要 这是一个微服务内部接口,当用户学习课程时,可能需要播放课程视频。此时提供视频播放功能的媒资系统就需要校验用户是否有播放视频的资格。所以,开发媒资服务(tj-media)的…