RabbitMQ精讲10:基础组件架构封装思路

简介: RabbitMQ精讲10:基础组件架构封装思路

目录

1 前言

2 一线大厂的MQ组件实现思路和架构设计思路

3 基础MQ消息组件设计思路-1(迅速,确认,批量,延迟)

迅速消息发送

确认消息发送

批量消息发送

延迟消息发送

4 基础MQ消息组件设计思路-2(顺序)

5 基础MQ消息组件设计思路-3(事务)

6 消息幂等性保障-消息路由规则架构设计思路



1 前言

分享互联网大厂的基础组件架构封装思路,

其中涉及到

  • 消息发送的多模式化、
  • 消息的高性能序列化、
  • 消息的异步化、
  • 连接的缓存容器、
  • 消息的可靠性投递、补偿策略、
  • 消息的幂等解决方案


2 一线大厂的MQ组件实现思路和架构设计思路

一线大厂的MQ组件实现思路和架构设计思路

一线大厂的MQ组件实现思路和架构设计思路

一线大厂的MQ组件实现思路和架构设计思路

一线大厂的MQ组件实现思路和架构设计思路

 

  • 支持高性能的序列化转换, 异步化发送消息
  • 支持消息生产实例与消费实例的链接池化缓存化, 提升性能
  • 支持可靠性投递消息, 保障消息100%不丢失
  • 支持消费端的幂等操作, 避免消费端重复消费的问题
  • 支持迅速消息发送模式, 在一些日志收集/统计分析等需求下可以保证高性能, 高吞吐量
  • 支持延迟消息模式, 消息可以延迟发送, 指定延迟时间, 用于某些延迟检查, 服务限流场景
  • 支持事务消息, 器100%保障可靠性投递, 在金融行业单笔大金额操作时会有此类需求
  • 支持顺序消息, 保证消息送达消费端的先后顺序
  • 支持消息补偿, 重试, 以及快速定位异常/失败消息
  • 支持集群消息负载均衡, 保障消息落到具体SET集群的负载均衡
  • 支持消息路由策略, 指定某些消息路由到指定的SET集群


3 基础MQ消息组件设计思路-1(迅速,确认,批量,延迟)

迅速消息发送

迅速消息发送

 

  • 迅速消息是指消息不进行落库存储, 不做可靠性的保障
  • 在一些非核心消息, 日志数据, 或者统计分析等场景下比较合适
  • 迅速消息的优点就是性能最高, 吞吐量最大


确认消息发送

确认消息发送

 

  • step1, step2 : 业务信息和消息信息入库
  • step3 : 消息发送到MQ Broker
  • step4 : Broker回送一个ACK确认消息
  • step5 : 更新DB中消息状态
  • step6 : 定时任务读取中间状态消息
  • step7 : 执行消息重发
  • step8 : 重发多次依旧失败的消息, 将其置为失败终态


批量消息发送

批量消息发送

批量消息是指我们把消息放到一个集合里统一进行提交, 这种方案设计思路是期望消息在一个会话里, 比如投递到threadlocal里的集合, 然后拥有相同的会话ID, 并且带有这次提交消息的SIZE等相关相关属性, 最重要的一点是要把这一批消息进行合并。对于Channel而言, 就是发送一次消息。这种方式也是希望消费端在消费的时候, 可以进行批量化的消费, 针对于某一个原子业务的操作去处理, 但是不保障可靠性, 需要进行补偿机制。

批量消息发送

  • step1 : 业务数据入库
  • step2 : 消息组装之后进行统一入库(如果不需要可靠性投递的话, 可以省略)
  • step3 : 消息发送到Broker
  • step4-step8基本和确认消息是一致的,如果不需要可靠性投递的话, 是可以省略的


延迟消息发送

延迟消息发送

延迟消息发送

  • 延迟消息就是在Message封装的时候, 添加delayTime属性即可, 使得我们的消息可以进行延迟发送1


4 基础MQ消息组件设计思路-2(顺序)

 

基础MQ消息组件设计思路-2(顺序)

基础MQ消息组件设计思路-2(顺序)

顺序消息有点类似于批量消息的实现机制, 但是有些不同, 顺序消息需要保障一下几点:

  1. 发送的顺序消息, 必须保障消息投递到同一个队列, 且这个消费者只能有一个(独占模式)
  2. 然后需要统一提交(可能是合并成一个大的消息, 也可能是拆分为多个消息), 并且所有消息的会话ID要一致
  3. 添加消息属性 : 顺序标记的序号, 和本次顺序消息的SIZE属性, 进行落库操作
  4. 并行进行发送给自身的延迟消息(带上关键属性 : 会话ID, SIZE)进行后续处理消费
  5. 当收到延迟消息后, 根据会话ID, SIZE抽取数据库数据进行处理即可
  6. 定时轮询补偿机制, 对于异常情况(如生产端消息没有完全投递成功或者消费端落库异常导致消费端落库后缺少消息条目的情况)进行补偿

基础MQ消息组件设计思路-2(顺序)


5 基础MQ消息组件设计思路-3(事务)

事务消息

事务消息

事务消息

事务消息

事务消息

  • 事务消息, 使用相对较少
  • 为了保障性能的同时, 也支持事务。并不推荐选择传统的RabbitMQ事务和Spring集成的机制, 因为在性能测试过程中, 这种方式性能并不理想, 非常消耗系统资源, 且会出现阻塞等情况, 高峰期也是一定程度上影响MQ集群的性能
  • 解决方案 : 采用类似可靠性投递的机制, 也就是补偿机制。但是数据源必须是同一个, 也就是业务操作的数据库DB1和消息记录的数据库DB2使用同一个数据库, 保证DB层的数据一致性
  • 然后利用重写Spring DataSourceTransactionManager, 在本地事务提交的时候进行发送消息, 但是也有可能事务提交成功但是消息发送失败, 这个时候就需要进行补偿了。


6 消息幂等性保障-消息路由规则架构设计思路

消息幂等性保障


可能导致消息出现非幂等性的原因 :

  • 可靠性消息投递机制造成的消息重发
  • MQ Broker服务于消费端消息传输的过程中出现网络抖动
  • 消费端故障或异常


消息幂等性设计 :

消息幂等性设计


相关实践学习
消息队列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
目录
相关文章
|
2月前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
4月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
3月前
|
负载均衡 5G 网络性能优化
深入解析LTE(长期演进技术)的基本架构及其关键组件
深入解析LTE(长期演进技术)的基本架构及其关键组件
510 2
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
97 0
|
24天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
88 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
4月前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
387 0
|
1月前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
149 3
【赵渝强老师】基于大数据组件的平台架构
|
2月前
|
SQL 存储 分布式计算
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
39 9
|
2月前
|
消息中间件 监控 Java
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
78 1
|
2月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
58 3

热门文章

最新文章