RocketMQ核心架构设计思想(上)

简介: RocketMQ核心架构设计思想(上)

RocketMQ中NettyRemotingServer的Reactor多线程模型


image.png

1、
一个 Reactor 主线程(eventLoopGroupBoss)
负责监听 TCP网络连接请求
建立好连接
创建SocketChannel
并注册到selector上
2、拿到网络数据后
再丢给Worker线程池(eventLoopGroupSelector)
3、在真正执行业务逻辑之前先需要defaultEventExecutorGroup进行
SSL验证、编解码、空闲检查、网络连接管理
4、根据 RomotingCommand 的业务请求码code去processorTable
这个本地缓存变量中找到对应的 processor
然后封装成task任务后
提交给对应的业务processor处理线程池来执行


消息过滤


image.png

1、
Consumer端订阅消息
是需要通过ConsumeQueue这个消息消费的逻辑队列拿到一个索引
然后再从CommitLog里面读取真正的消息实体内容
2、ConsumeQueue的存储结构
有8个字节存储的Message Tag的哈希值
基于Tag的消息过滤正式基于这个字段值的
  • Tag过滤方式

image.png

1、
一个消息有多个TAG
Consumer端在订阅消息时可以指定Topic或指定TAG
2、
发送一个Pull消息的请求给Broker端
3、
Broker端从RocketMQ的文件存储层—Store读取数据之前
a、
会用这些数据先构建一个MessageFilter
然后传给Store
b、
Store从 ConsumeQueue读取到一条记录后
会用它记录的消息tag hash值去做过滤
c、
由于在服务端只是根据hashcode进行判断
无法精确对tag原始字符串进行过滤
故在消息消费端拉取到消息后
还需要对消息的原始tag字符串进行比对
如果不同,则丢弃该消息,不进行消息消费
  • SQL92的过滤方式



image.png


和上面的Tag过滤方式区别只是在Store层的具体过滤过程不太一样
Store层通过SQL表达式检索ConsumeQueue索引
因会影响效率
所以在检索之前通过布隆过滤器避免每次都通过SQL表达式检索


负载均衡


Producer负载均衡

image.png

1、
Producer端在发送消息的时候
会先根据Topic找到指定的TopicPublishInfo
2、
在获取了TopicPublishInfo路由信息后
RocketMQ的客户端在默认方式下selectOneMessageQueue()方法
会从TopicPublishInfo中的messageQueueList中
3、
选择一个队列(MessageQueue)进行发送消息


具体的容错策略

image.png

何为不可用

就是按之前失败的
按一定的时间做退避
如果上次请求的延迟超过550Lms
就退避3000Lms
在这期间该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
相关文章
|
1月前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
3月前
|
消息中间件 存储 Java
RabbitMQ 在微服务架构中的高级应用
【8月更文第28天】在微服务架构中,服务之间需要通过轻量级的通信机制进行交互。其中一种流行的解决方案是使用消息队列,如 RabbitMQ,来实现异步通信和解耦。本文将探讨如何利用 RabbitMQ 作为服务间通信的核心组件,并构建高效的事件驱动架构。
144 2
|
2月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ 版架构优化评测
云消息队列RabbitMQ 版架构优化评测
65 6
|
3月前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
854 2
|
3月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
67 0
|
4月前
|
消息中间件 存储 缓存
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
|
5月前
|
消息中间件 存储 SQL
RocketMQ与Kafka架构深度对比
RocketMQ与Kafka架构深度对比
|
6月前
|
消息中间件 存储 Apache
MQ产品使用合集之有RocketMQ arm架构的镜像吗
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
333 1
|
6月前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
256 1
|
6月前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
190 0
RabbitMQ入门指南(二):架构和管理控制台的使用
下一篇
无影云桌面