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
相关文章
|
11月前
|
消息中间件 大数据 关系型数据库
RocketMQ实战—3.基于RocketMQ升级订单系统架构
本文主要介绍了基于MQ实现订单系统核心流程的异步化改造、基于MQ实现订单系统和第三方系统的解耦、基于MQ实现将订单数据同步给大数据团队、秒杀系统的技术难点以及秒杀商详页的架构设计和基于MQ实现秒杀系统的异步化架构。
761 64
RocketMQ实战—3.基于RocketMQ升级订单系统架构
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
11月前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
3296 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
消息中间件 存储 Java
RabbitMQ 在微服务架构中的高级应用
【8月更文第28天】在微服务架构中,服务之间需要通过轻量级的通信机制进行交互。其中一种流行的解决方案是使用消息队列,如 RabbitMQ,来实现异步通信和解耦。本文将探讨如何利用 RabbitMQ 作为服务间通信的核心组件,并构建高效的事件驱动架构。
613 2
|
消息中间件 人工智能 自然语言处理
基于 RocketMQ 事件驱动架构的 AI 应用实践
基于 RocketMQ 事件驱动架构的 AI 应用实践
450 2
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
319 0
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ 版架构优化评测
云消息队列RabbitMQ 版架构优化评测
251 6
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
2729 3
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
452 0