RabbitMQ消息中间件学习1:基本概念与简单实战模式讲解

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Message Queue(消息队列),在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。就是两个子系统之间进行通信,有两种选择,第一种是直接远程调用,第二种是借助第三方完成通信。发送方称为生产者,接收方称为接受者。

MQ概念


Message Queue(消息队列),在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。


就是两个子系统之间进行通信,有两种选择,第一种是直接远程调用,第二种是借助第三方完成通信。


发送方称为生产者,接收方称为接受者。


MQ的优势


1、应用解耦

应用解耦的意思:设计系统追求高内聚低耦合的目的,那么分布式也是这样的,就是降低系统和系统之间的耦合性。

实战分析:订单系统通过远程调用子系统完成业务。

bff6a03ac2bfbc04f4163f6f6201b572_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

也就是说订单系统会和库存系统、支付系统、物流系统是耦合的,如果库存系统挂了,那么订单系统就会挂。那么就称这个系统的容错性比较低;还有如果加一个x系统,那么程序员只能修改订单系统,这样就会很难受,不停修改订单系统,可维护性降低了。

4658ae7c0dd82a00ad5fd3ca5f9ff4d1_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

那么如何通过MQ来解决呢。

c971ab421d279275a2c21d79555870ff_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

用户下单,订单系统发送一个信息给MQ,然后订单系统就会返回一个下单成功的信息给用户。然后MQ给子系统发消息。这个时候即使库存系统出错了,可能出错了一小会,然后好了,然后再从MQ中拿就好了。

如果要加X系统,那么这个时候X只需要从MQ中拿就可以了,跟订单系统没有关系的。程序员不需要从订单系统中加什么代码。


增加了可维护性与解耦性。

2、异步提速

acbaba693dac58d053ea9180fa19692e_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

订单系统保存自己的数据库20ms,这个300ms是同步的过程,订单系统先调用库存系统300ms,然后支付系统300ms,然后物流系统300ms,然后再返回给订单系统。这个时候需要损耗的时间:

1ad4c22685a191414860c454c1a7a6e9_da171418719d4ae48265785de17543f0.png

一般是200ms内得到相应才可以提升用户体验。

73952a837c59169a5d55967457151fab_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

这个只需要25ms,提升了用户体验,不需要管是否成功。

1s中的吞吐量提升了。


3、削峰填谷

110f93138120119421340c65cde37d51_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

d87ca0d3d5e34eccd9bc466ae22e3976_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png


当进行一个秒杀的话,那么A系统就宕机了,用户体验太差了。

现在可以用MQ来消除这个峰值,这个时候用户发送请求给MQ就行。请求都是对接到MQ,MQ专门做这种事的,然后A系统再慢慢的拉1000个请求来处理,这个时候A系统就可以稳定很多了。

913e02f9b169345c0e69ea8e010b89f8_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png


MQ的劣势


只有明确了缺点,才能更好的规避,更好的进行服务。


1、系统可用性降低

A、B子系统之间加一个MQ,可用性降低了。

这个时候还要保证MQ没有问题。

也就是说引入了外部依赖,系统的稳定性变差了,一旦MQ宕机,就会对于业务造成影响,这个时候就要保证高可用了。


2、系统复杂度提高

以前系统是同步的远程调用,现在是进行MQ异步调用。

如何保证消息没有被重复消费?怎么处理消息丢失情况?如何保证消息传递的顺序性?


3、一致性问题

A处理完业务,通过MQ给BCD发送消息,BC成功,D失败,那么如何保证消息处理的一致性呢?


上述几个问题会经常在面试中问到。所以需要好好考虑。


使用MQ需要的条件

13f26f492b18e0a90a750eac02a4c04c_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_19,color_FFFFFF,t_70,g_se,x_16.png

常见的MQ用品

57dc0e7a31845128adcf5de17cd99117_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

RabbitMQ专门适合高并发的场景。


RabbitMQ简介


基于AMQP协议,Adavanced Message Queuing Protocol 高级消息队列协议。是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端等限制。类比HTTP。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
23天前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
2月前
|
消息中间件 存储 RocketMQ
消息中间件-RocketMQ技术(二)
消息中间件-RocketMQ技术(二)
|
2月前
|
消息中间件 存储 中间件
消息中间件-RocketMQ技术(一)
消息中间件-RocketMQ技术(一)
|
1月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
81 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
16天前
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
20天前
|
设计模式 监控 中间件
深入理解PHP中的中间件模式
【10月更文挑战第20天】探索PHP编程世界中的“交通枢纽”——中间件模式。从代码层面剖析如何实现请求和响应的高效管理,以及如何在开发中应用这一模式来增强项目的扩展性和维护性。
|
8天前
|
设计模式 缓存 中间件
探索PHP中的中间件模式
【10月更文挑战第33天】在编程世界中,设计模式是解决常见问题的模板。本文将带你领略PHP中中间件模式的魅力,它如何优雅地处理请求,并保持代码的整洁与可维护性。通过实际代码示例,我们将一步步实现一个简单的中间件框架,让你轻松理解并应用到自己的项目中。
|
1月前
|
中间件 PHP 开发者
深入理解PHP中的中间件模式
【10月更文挑战第6天】在PHP开发中,中间件模式是一种优雅的处理请求和响应的方式。本文将带你探索中间件模式的概念、实现及其在PHP框架中的应用,同时提供实用的代码示例来加深理解。
|
1月前
|
消息中间件 数据采集 中间件
RabbitMQ的使用—实战
RabbitMQ的使用—实战
|
2月前
|
JavaScript 前端开发 中间件
深入浅出Node.js中间件模式
【9月更文挑战第13天】本文将带你领略Node.js中间件模式的魅力,从概念到实战,一步步揭示如何利用这一强大工具简化和增强你的Web应用。我们将通过实际代码示例,展示中间件如何在不修改原有代码的情况下,为请求处理流程添加功能层。无论你是前端还是后端开发者,这篇文章都将为你打开一扇通往更高效、更可维护代码的大门。

相关产品

  • 云消息队列 MQ