哥们,你们消息中间件是如何落地的?(M3)

新手队首次打CCPC省赛,3题收尾的实战复盘与心态调整指南 本文分享了新手队伍首次参加CCPC省赛的实战经验与心态调整策略。通过3题收尾的复盘,详细解析了组队策略、赛前准备、比赛决策和心态管理等关键环节,特别强调了技能互补、环境配置和时间管理的重要性,为大学生程序设计竞赛参赛者提供实用指南。 阅读详情

各位看官,天热了,先来个小风扇凉快一下,哈哈~

一、前情回顾

 

之前给大家聊了一下,面试时如果遇到消息中间件这个话题,面试官上来可能问的两个问题:

 

  • 你们的系统架构中为什么要引入消息中间件?

  • 系统架构中引入消息中间件有什么缺点?

 

关于这两个问题的回答,可以参见之前的两篇文章:

 

在问完这两个问题之后,不同风格的面试官可能会展开不同的发问。

 

针对那种工作年限比较长的资深的同学,可能会开始就候选人所在公司使用的消息中间件,深入里面的技术细节,比如让你聊聊RocketMQ的架构原理和核心源码?

 

但是另外一种面试风格,会先从你们的项目和业务入手进行考察,比如像下面这样:

 

  • 消息中间件在你们生产项目里具体是哪个业务场景下落地的?

  • 这个业务场景有什么技术挑战?

  • 为什么必须要在这个业务场景里用消息中间件技术?

  • 具体使用消息中间件的时候是怎么来用的?

 

好!这篇文章,咱们从第二种风格来聊聊。

 

 

 

二、业务场景介绍

 

我们会落地到某个具体业务系统的某个场景下,看看如何使用消息中间件,然后其效果是什么。

 

业务场景的话,咱们就用大家都很熟悉的电商业务为例,这里为了便于理解,对其做了一定的抽象和简化。

 

大家还是来考虑一个下订单的业务流程,比如你下个订单,此时需要干几件事情:

 

  1. 更新订单状态为“待发货”(耗时20ms)

  2. 扣减商品库存(耗时100ms)

  3. 增加会员积分(耗时80ms)

  4. 附赠优惠券(耗时50ms)

  5. 仓储调度发货(耗时几十秒)。

 

说明一下:上述环节,为了便于大家理解,做了简化。实际真正复杂的电商系统里,整体环节和业务流程会比这个复杂很多倍,而且耗时也绝对不是上面那么简单的。

 

老规矩!我们还是通过一张手绘图,来看看这整个的业务流程:

 

如上图,这个下订单的业务流程中:

更新订单状态(20ms) +  扣减商品库存(100ms) +  增加会员积分(80ms) +  附赠优惠券(50ms) =  250ms。

 

也就是说,仅仅是这4个流程的话,也就200多毫秒的耗时。

 

200多毫秒的耗时,对用户下单体验来说是非常快速的,几乎就是一瞬间就完成了,不会感到过多的停顿,也就是一下子就可以看到自己下单成功了。

 

但是,如果加上那个调度仓储发货呢?

 

那个环节需要读取大量的数据、使用多仓库/多货位的调度算法、还要跟C/S架构的仓储系统进行网络通信,因此我们这里假设这个环节可能会耗时数十秒。

 

一旦加上那个调度仓储发货的环节到这个下单流程里,就可能导致用户要等页面卡顿几十秒后才会看到下单成功的提示,这个用户体验就相当的差了。

 

按照之前一篇文章《哥们,你们的系统架构中为什么要引入消息中间件呢?》的说法。对于这种场景,完全适合使用消息中间件来进行异步化调用。

 

也就是说,订单服务对仓储调度发货,仅仅是发送一个消息到MQ里,然后仓储服务消费消息之后再慢慢的执行调度算法,然后分配商品发货任务给对应的仓库即可。

 

这样的话,就可以把耗时几十秒的仓储调度发货的环节,从下单流程里摘除出去了。进而保证下单流程就仅仅是耗时200多毫秒而已。

 

至于那个耗时几十秒的仓储调度发货环节,我们通过异步的方式慢慢执行即可,不会影响用户下单的体验。

 

以上过程,我们同样来一张图,大家直观的感受一下:

 

 

三、初步落地

 

好!接下来我们就假设大家在实际生产中还没用过消息中间件,咱们从0开始,看看如何落地?

 

对于已经在生产中使用过消息中间件的小伙伴,不妨也看看,权当复习,温故知新!

 

我们以RabbitMQ为例,假如你用的消息中间件是RabbitMQ,那么我们对这个消息中间件应该如何安装和部署呢?

 

很简单,RabbitMQ的官方文档里提供了非常详细的安装部署步骤,你可以在自己的笔记本电脑本地安装,也可以在公司的服务器上部署。

 

现在假设你已经参考了官方文档并安装完成,那么接下来在代码层面应该怎么来引入RabbitMQ以及在系统里实现收发消息呢?

 

下面通过一些HelloWorld级别的代码和一些简单的示例图,给大家演示一下RabbitMQ是如何收发消息的。

 

对于很多在实际生产中使用过MQ的同学,这些代码可能对实际生产中使用过MQ的同学,显得太简单了。

 

不过考虑到很多初学者可能连用都没有用过MQ,甚至是才听说消息中间件不久,所以笔者认为这些demo代码以及手工绘图,还是很有必要。

 

 

好!看完了代码,这个时候,我们可以通过一张图来想象一下两个服务之间的通信。
 

 

订单服务你可以启动多个,不同的订单服务都可以往一个RabbitMQ的queue里推送消息。

 

仓储服务你也可以启动多个,多个仓储服务会采用round-robin的轮询算法,每个服务实例都可以从RabbitMQ queue里消费到一部分的消息。

上面的图里,订单服务在MQ专业术语中叫做“生产者”,英文是“Producer”,意思就是这个服务是专门负责生产消息投递到MQ的。

 

仓储服务在MQ专业术语中叫做“消费者”,英文是“Consumer”,意思就是这个服务专门是负责从MQ消费消息然后处理的。

 

这个时候,这套异步通信的架构就可以跑起来了。

 

好了,到目前为止,虽然这个代码还存在不少问题,但是没关系,大体上我们已经给一些不太熟悉MQ技术的同学,从一个比较形象易于理解简化后的电商业务场景出发,通过HelloWorld级别的示例代码和手工绘图,将MQ这个技术落地跑起来了。

 

更进一步,各位同学完全可以参照这个文章里的案例,思考一下:自己负责的项目里,有没有类似的业务场景可以使用MQ的?

 

然后想办法在自己的项目里落地使用MQ的技术来做一下异步化,提升核心流程的性能。

 

这样未来在跳槽面试的时候,才可以做到游刃有余,有自己的一套东西可以说。

个人观后总结

文章来源:石杉的架构笔记(id:shishan100)

为什么很多哥们儿干了5年网络,还是觉得自己卡在中级? 很多人以为,干满5年、CCNP到手、日常配置路由交换没问题,就该是高级了。但实际上,中级和高级的差距,不在“会不会配命令”,而在“能不能独立扛事儿”。高级工程师看问题,是从业务到架构、从底层协议到自动化运维,一条龙搞定;中级往往是“设备级高手”,问题一复杂就抓瞎,或者新东西出来就两眼一抹黑。我当年第5年的时候,也觉得自己牛了,结果领导让我设计一个跨数据中心的SD-WAN方案,我愣是卡了三天。不是不会命令,是脑子里缺那张“大图”。所以,第一件事:咱们得先认清,自己到底卡在哪儿。 阅读详情

相关推荐

拼多多爬虫实战:逆向sign与anti_content动态参数解析

现代电商爬虫已远超基础HTTP请求范畴,其核心在于理解服务端如何通过动态签名(sign)、设备指纹、行为验证等多维机制定义‘合法请求’。拼多多作为典型代表,将价格、销量、评价等关键数据完全剥离HTML,转由强校验API返回,依赖HMAC-SHA256嵌套签名、anti_content前端加密载荷及滑动验证token闭环。这类机制本质上是客户端环境可信度与请求上下文一致性的实时博弈,技术价值在于保障数据安全与业务风控。典型应用场景包括竞品价格监控、销量趋势分析、评价情感挖掘等需高保真数据的商业分析任务。本文聚

weixin_29741447的博客 831

RabbitMQ消息传递流程

两个新名词本篇文章以上篇文章《Rabbit的基础概念》为基础,且在上篇文章的前提下又引入了两个新的概念:连接( Connection)我们知道绝大部分的通信都是基于网络...

javaxuexilu的博客 2266

知识图谱中的 Ontology(本体论)

本文的部分图片和内容来自中国科学院自动化研究所刘康老师的课件 Ontology(本体论) Ontology 是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。 Ontology 是知识体系构建的关键技术,知识图谱是一种人工智能技术,它的关键在于让计算机能够处理人类的知识。然而,人类脑海中的知识通常是直觉性的,我们无法将这种直觉性的知识直接输入给计算机,On...

P01son的博客 2万+

RabbitMQ工作流程详解

1. 生产者发送消息的流程 生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel) 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等 生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来 生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换器等信息 相应的交换器根据接收

rzpy_qifengxiaoyue的博客 2229

硅纪元应用测评 | AI搜索引擎大比拼:360AI搜索、秘塔搜索、GenSpark AI和天工AI对比评测

搜索引擎输出的每个段落都有对应的出处,如果有错误,也是信息源的问题,从普通用户的角度来看,这与AI搜索的产品关系不大,能让用户对AI搜索的服务和得到的信息有一个隔离。同时,提供更多的定制选项,允许用户根据自己的偏好调整搜索结果的权重和排序,将使得搜索体验更加个性化和满足用户的具体需求。此外,大部分搜索工具还提供了一个无广告的搜索环境(360AI搜索部分内容会有广告),极大地提升了用户的搜索体验。AI搜索的本质依然是搜索,但它通过AI的逻辑分析和语言重新组织,使用户能够快速得到想要的信息。

guijiyuantech的博客 2013

STM32F103C8T6键盘DIY全攻略:从电路设计到固件烧录(附避坑指南)

本文详细介绍了基于STM32F103C8T6微控制器的DIY键盘制作全流程,涵盖硬件电路设计、按键矩阵实现、USB HID通信及固件烧录等关键步骤。特别针对常见问题提供避坑指南,帮助开发者高效完成从电路设计到功能实现的完整过程,打造个性化瀚文键盘。

soda5的博客 770

RabbitMQ快速入门(简单收发消息)

1.了解数据隔离2.RabbitMQ控制台收发信息3.SpringBoot整合RabbitMQ收发信息以上就是简单的消息收发,具体的编程化创建虚拟机,队列以及收发信息,我会在讲解交换机的文章中讲解。

浩泽学编程的博客 2850

Spring Boot 3.2 集成 Shiro 2.0.1 踩坑实录:从 javax.servlet 到 jakarta.servlet 的完整迁移指南

本文详细介绍了Spring Boot 3.2集成Shiro 2.0.1时遇到的从javax.servlet到jakarta.servlet的迁移问题,提供了完整的解决方案和迁移指南。通过Maven依赖配置和代码调整,帮助开发者顺利跨越Jakarta EE的兼容性鸿沟,确保Shiro权限控制在Spring Boot 3.2环境中正常运行。

weixin_42570296的博客 482

RabbitMQ消息发送和接收(实例)

的消息只能被同一个消费者消费,如果没有消费监听队列那么消息会存放到队列中持久化保存,直到有消费者来消费这个消息,如果有消费者监听队列则立即消费发送到队列中的消息。4.模拟连续向队列中放两次消息,这两条消息的队列名称相同,内容不同。再次返回消息队列,此时消息队列已经没有了消息,消息已经模拟出队了。7.此时进入控制台查看队列,发现队列中的消息已经全部取出。修改Idea消息的内容再向队列里发送一次消息。修改Idea消息的内容再向队列里发送一次消息。模拟从队列中取出消息,查看取出的消息内容。

weixin_59334478的博客 1万+

基于 Simulink 的**单相全桥 LLC 谐振双向 DC-DC 变换器(带软开关特性)**实战教程

原边(Primary):全桥逆变电路(4个 MOSFET/IGBT),将直流斩波为高频方波。变压器:提供电气隔离和电压变比。副边(Secondary):全波或全桥整流电路(同步整流或二极管)。

xiaoheshang_123的博客 54

电池管理系统(BMS)软件:CATL BMS二次开发_(1).CATL BMS软件概述

CATL BMS软件的保护机制是确保电池组安全和可靠运行的关键部分。通过高精度的传感器和智能算法,BMS可以实时监测电池组的状态,及时采取保护措施。二次开发中,可以根据特定的应用需求,增加新的传感器、优化算法、扩展通信接口等,进一步提高系统的性能和可靠性。维护和扩展则是确保系统长期稳定运行的重要手段。希望以上内容对您理解CATL BMS软件的保护机制有所帮助。如果您有任何进一步的问题或需要更详细的解释,欢迎随时提问。

zhubeibei168的博客 1457

RabbitMQ基本原理

RabbitMQ基本原理

Little_Arya的博客 1903

Far planner 代码系列(14)

MatchContourWithNavGraph(3) this->EnclosePolygonsCheck(); //可能有些ctnode的is_contour_necessary属性变成了true // 这说明我的contour_graph是一个local层级的 才会从这里面 get new vertices new_convex_vertices.clear(); //! 把contour_graph_里符

博客 899

哥们,你们的系统架构中为什么要引入消息中间件?(M1)

文章来源:石杉的架构笔记(id:shishan100) 这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题。 假如面试官看你简历里写了MQ中间件的使用经验,很可能会有如下问题: 你们公司生产环境用的是什么消息中间件? 为什么要在系统里引入消息中间件? 引入消息中间件之后会有什么好处以及坏处? 好,我们一个个的来分...

Mr.zhao 575

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【Java进阶面试系列之三】哥们,消息中间件在你们项目里是如何落地的?

原文地址:石杉的架构笔记 之前给大家聊了一下,面试时如果遇到消息中间件这个话题,面试官上来可能问的两个问题: 你们的系统架构中为什么要引入消息中间件? 系统架构中引入消息中间件有什么缺点? 关于这两个问题的回答,可以参见之前的两篇文章: 《哥们,你们的系统架构中为什么要引入消息中间件?》 《哥们,那你说说系统架构中引入消息中间件有什么缺点?》 在问完这两个问题之后,不同风格的面试官可...

踟蹰千年的博客 194

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NVIDIA系列Jetson NX开箱跑tensorRT+yolov3

买来的Xavier NX是不带SD卡的,记得提前买个,别机子到了,SD卡(64G起)还没到 买来第一步,那显然是得刷系统,这我就贴个别人帖子了,毕竟我也是在那下的,如果没百度云会员,那下载速度杠杠滴,可以留言,我有时间的时候把东西通过邮箱发 装机完后,先跑个自带的tensorRT+yolov3,顺便测测速 上来先跟着readme走,走到 python3 -m pip install -r requirements.txt 直接卡住,各种报错,后来找到原因后,就是protobuf和onnx这.

fee的博客 6387

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GTE+SeqGPT效果展示:SeqGPT-560m对‘把这句话改得更正式’指令的准确响应案例

本文介绍了如何在星图GPU平台自动化部署AI语义搜索与轻量化生成实战项目(GTE + SeqGPT)镜像,实现高效的文本正式化改写。该镜像集成了SeqGPT-560m轻量化生成模型,能够快速将口语化内容转换为正式商务文体,适用于邮件撰写、文档优化等实际应用场景,提升沟通效率与专业性。

weixin_42629522的博客 1326

一分钟部署 Llama3 中文大模型,没别的,就是快

前段时间百度创始人李彦宏信誓旦旦地说。随后小扎同学就给了他当头一棒,向他展示了什么叫做顶级开源大模型。美国当地时间4月18日,Meta 在官网上发布了两款开源大模型,参数分别达到 80 亿 (8B) 和 700 亿 (70B),是目前同体量下性能最好的开源模型,而且直接逼近了一线顶级商业模型 GPT-4 和 Claude3。与此同时,还有一个 400B 的模型还在路上,估计很快就会放出来,到时候就真的碾压了,😢。

优快云_224022的博客 1027

东华码蹄集第22周oj赛(splay ,小码哥们约见,子集统计,距离统计)

码蹄集

s1050712899的博客 1227

【LangGraph实战】《LangGraph实战》_223.[第11章 技术展望] 智能体应用的商业化前景与落地方向

智能体商业化落地方向1 工程化破局2 场景掘金3 可控性设计4 成本重构5 数据闭环6 合规筑基文字目录:嗨,大家好呀,我是你的老朋友精通代码大仙。接下来我们一起学习 《LangChain核心技术与LLM项目实践》。“饭要一口一口吃,路要一步一步走,但Agent商业化这条路,很多人第一步就迈错了。”你是不是也这样?在Jupyter里把LangGraph的状态图画得花里胡哨,节点连边堪比艺术品,Demo一跑,输出丝滑,感觉自己就是那个天选之子,下一个独角兽就藏在你这百来行代码里。结果兴冲冲去找客户,或者想在内

191

jetson nx跑yolov3_NVIDIA系列Jetson NX开箱跑tensorRT+yolov3

买来的Xavier NX是不带SD卡的,记得提前买个,别机子到了,SD卡(64G起)还没到买来第一步,那显然是得刷系统,这我就贴个别人帖子了刷机帖子 毕竟我也是在那下的,如果没百度云会员,那下载速度杠杠滴,可以留言,我有时间的时候把东西通过邮箱发装机完后,先跑个自带的tensorRT+yolov3,顺便测测速上来先跟着readme走,走到python3 -m pip install -r re...

weixin_39548787的博客 575

Hermes 上手指南:真实开发里的落地路径

本文概述文章目标、核心观点和实践价值。之前有个哥们问我:“面试官问我对 AI 编程工具的看法,我除了说‘能提效’还能说点啥?说实话,这问题挺扎心。大部分开发者面对这类话题,要么吹得天花乱坠,要么说“还没怎么用”。但在实际的项目复盘或者面试场景里,如果你能讲清楚**为什么选这个工具**、**怎么把它嵌进现有工作流**、以及**它在哪些环节让你省了时间**,那印象分绝对不一样。最近我折腾了一圈 `Hermes`,不是那种跑通 Hello World 的浅尝辄止,而是试着把它塞进一个微服务重构的项目里。

资料免费分享,点击名片 150

granite-4.0-h-350m惊艳效果:Ollama下350M模型完成古诗创作与风格迁移

本文介绍了如何在星图GPU平台自动化部署【ollama】granite-4.0-h-350m镜像,实现高效的文本生成与风格迁移。该轻量级模型支持古诗创作和现代文转文言文等应用,适用于内容创作、教育辅助和文本风格转换场景,为用户提供便捷的AI文本处理能力。

weixin_29317963的博客 172

一分钟部署 Llama3 中文大模型,没别的,就是快,大模型入门到精通,收藏这篇就足够了!

一分钟部署 Llama3 中文大模型,没别的,就是快,大模型入门到精通,收藏这篇就足够了!

pythonhy的博客 867

巴西圣保罗大学测试Qwen3Guard-Gen-8B葡萄牙语审核准确性

Qwen3Guard-Gen-8B通过语义理解与生成式推理,实现对葡萄牙语等多语言内容的精准安全审核,有效识别讽刺、隐喻和文化敏感表达。其三级风险分级机制提升了审核弹性,在巴西实测中F1-score达0.92,支持零样本迁移与轻量化部署,为全球AI内容治理提供跨文化落地范例。

weixin_42629522的博客 1011

5月史诗级更新落地,一文吃透Claude Code全部实用新功能

兄弟们,我跟你们讲,干AI这行22年了,什么大风大浪没见过?但Claude Code这个5月,属实给我整不会了。一个月更30个版本,从v2.1.136一路飙到v2.1.157+,平均每天1到2个更新。最疯的那周,连续5天高强度发版。我一开始以为Anthropic的工程师是不是集体打了鸡血,后来一琢磨,不对,这哪是打鸡血,这分明是全员进化成不需要睡眠的代码机器了。你说他们是不是偷偷用了自己的产品?

人工智能AI技术 372
上一篇: 哥们,说下你们引入消息中间件有什么缺点?(M2)
下一篇: Java8 lambda用 Optional 处理非空操作
Mr_baci
博客等级 码龄9年 1万+粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值