rabbitmq实战_RabbitMQ 实战系列之:消息传递
一、场景引入,问题初现
很多读者期待的是先讲段理论、原理啥的,然而我的写文章的逻辑习惯性的是想将问题的背景引入,用真实的案例来寻寻渐进。
我的老上家是一家创业型的B2B方向建材互联网企业,从 0 到 1 组建了一支10 人的小型研发团队。在入职的第二天被告知要在一个半月内上线WEB网站和APP两个端项目,项目启动的时候我们就两个JAVA,我们商量着如何启动项目,如何快速进入开发,快速完成任务。最终我们选用了SpringBoot + Dubbo 架构来进行开发。一段时间没日没夜的加班,好不容易核心业务系统给做出来了,平时正常QA测试没发现什么大毛病,感觉性能还不错,一切都很完美。
然后系统就这么上线了,一开始业务复杂度低,用户规模小,系统上线一段时间,注册用户量 5万+,日活平均 1 千用户。
每天都有新的数据进入数据库的表中,就这么日积月累的,没想到数据规模居然慢慢吞吞增长到了单表几百万。
这个时候呢,看起来也没太大的毛病,就是有运营人员反应,文章推送功能反应比较慢,页面上的 loading 要转个 10 来分钟才消失。
这是为啥呢?
- 推送的业务场景多样,多表关联。
- 项目数据库还没有设计好索引,或者是设计了索引,但无奈负责该模块的小弟采用串行编码,导致整方法执行完,等待时间过长。
二、扬汤止沸,饮鸩止渴
一般碰到这种事情,一大堆代码性能问题,80%的工程师首先想到的大多是采用多线程进行编码。
后来仔细梳理现有业务场景,很多场景需要做消息的传递工作,这个时候就想着有什么方式能进行消息的传递工作,自然而然选择引入消息队列。
三、追本溯源,治标治本
考虑消息中间件的引入主要是保证系统的可用性,所以消息队列的引入很好的解决了系统的性能问题。
引入消息队列后,整体流程如图所示。
同样的功能,将业务逻辑分到三个系统处理:
- 文章推送服务只需要对文章进行保存,然后将文章ID Provider 到 MQ 的 new_article 队列中。
- 业务查询服务主要是 Consumerr MQ 中 new_article 队列中各种条件进行筛选聚合,并叫结果 Provider 到 MQ 的 push_article 队列中。
- 消息推送服务主要是 Consumer MQ 中 push_article 队列中用户集合进行push。
终于系统上线,运营人员反馈该功能体验很好,为他们节省了大量时间。
四、总结全文,回眸再看
本文主要是针对实战业务中场景出现的实际问题,从系统架构上进行优化,引入MQ帮助系统进行消息的传输功能, 从而让各个服务只关注各自的实现,达到系统解耦的功效;另一方面主要是提高了系统性能,保证系统的稳定运行,让用户体验更好。
rabbitmq实战_RabbitMQ 实战系列之:消息传递相关推荐
- rabbitmq实战_RabbitMQ实战(四) - RabbitMQ amp; Spring整合开发
0 相关源码 1 你将学到 RabbitMQ 整合 Spring AMQP实战 RabbitMQ 整合 Spring Boot实战 RabbitMQ 整合 Spring Cloud实战 2 Sprin ...
- rabbitmq direct 多个消费者_RabbitMQ实战应用技巧
1. RabbitMQ实战应用技巧 1.1. 前言 由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑 1.2. 概述 Ra ...
- 微软官方Windows Server 2008实战攻略系列
微软Windows Server 2008实战攻略系列之十八:Windows Server 2008 高可用性配置实现 http://download.microsoft.com/download/f ...
- (全部)2008重磅出击——微软Windows Server 2008实战攻略系列
微软Windows Server 2008实战攻略系列之十八:Windows Server 2008 高可用性配置实现 [url]http://download.microsoft.com/downl ...
- Oracle特殊恢复原理与实战(DSI系列)
1.深入浅出Oracle(DSI系列Ⅰ) 2.Oracle特殊恢复原理与实战(DSI系列Ⅱ) 3.Oracle SQL Tuning(DSI系列Ⅲ)即将开设 4.Oracle DB Performan ...
- java 微服务实践 视频,全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程...
全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程 ===============课程目录=============== ├─(1) 03Java 微服务实 ...
- 【SQL开发实战技巧】系列(六):从执行计划看NOT IN、NOT EXISTS 和 LEFT JOIN效率,记住内外关联条件不要乱放
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 【SQL开发实战技巧】系列(十):从拆分字符串、替换字符串以及统计字符串出现次数说起
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
最新文章
- golang runes 字符串 互转
- VS.NET 2005 Beta2的稳定性太差了:(
- 微机化远动系统与计算机网络,远动技术教案_第3章_微机监控系统数据通信网络结构及原理.pdf...
- Div+CSS布局入门教程(四) 页面顶部制作之二
- [转载] python win32api 使用小技巧
- java装箱与拆箱_【转】java 自动装箱与拆箱
- 三线表(带有行横标目)的绘制方法
- 华为U5800刷机,Root权限
- SQL server 2008 全代码
- 解决win7语言栏消失问题
- Xshell和xftp免费下载与使用
- UniApp接入阿里云金融级实人认证服务
- 浅谈偏光镜使用与选购[机器视觉系列]
- EPUB转为PDF和书籍pdf下载
- 人工智能的未来趋势将会走向哪里?
- python投票系统项目ppt_python fastApi实战项目 - 爱投票管理系统(一)
- 面试自动化测试的必问题
- NAND Flash SSD 是如何生产出来的?
- ibus的设置及极点五笔的安装
- 自学java基础笔记
热门文章
- 第三次学JAVA再学不好就吃翔(part32)--方法重写
- python技术是什么_学 Python 都用来干嘛的?
- Python入门知识点总结
- 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率
- 如何在 SAP BTP 平台上重用另一个已经开发好的 service
- 使用 generator-easy-ui5 快速创建 SAP UI5 应用的工程结构
- 最简单的 Webpack Hello World 例子
- SAP Spartacus 产品明细页面的 url 设计和数据源
- SAP Spartacus Popover Directive 构造函数的用途分析
- 试图用Session Administration删除某用户的session时报错