RocketMQ源码架构说明

342 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

RocketMQ源码架构

RocketMQ源码使用Maven进行打包构建

下图是源码的所有模块划分

  • acl:权限模块
  • broker:Broker模块,启动Broker
  • client:客户端,包含消息的生产和消费的相关类
  • common:公共类、公共包
  • dev:开发者信息,非源代码
  • distribution:部署实例文件夹,非源代码
  • docs:文档
  • example:使用实例代码
  • filter:消息过滤相关代码
  • logging:日志相关
  • namesrv:服务注册发现模块
  • openmessaging:消息开放标准
  • remoting:网络通讯模块
  • srvutil:服务器工具类
  • store:消息存储实现相关类
  • style:checkstyle相关实现
  • test:测试代码
  • tools:工具类,监控命令相关实现类

Untitled

RocketMQ的设计目标

  1. 架构模式

    RocketMQ采用发布订阅模式,核心组件包括消息生产者、消息存储、消息消费者、服务的发现等

  2. 顺序消息

    RocketMQ支持顺序消息消费,对于在同一个消息队列里消息是有序的,属于是局部顺序。

  3. 消息过滤

    RocketMQ支持消息的过滤,可以在Broker端进行消息的过滤,只发送消息者感兴趣的消息。

  4. 消息存储

    消息中间件的核心就是消息的存储,两个维度的考量:消息堆积能力和消息的消费能力。

    RocketMQ采用顺序写、随机读。

    追求消息的存储高性能,引入内存映射的机制,所有主题的消息存储在同一个文件中。

    为了避免消息的无限堆积,引入过期消息机制(消息只存储3天)和文件存储空间报警机制。

  5. 消息的高可用性

    RocketMQ可以灵活地选择同步刷盘或异步刷盘,主从同步复制或异步复制,以及多副本机制,用户可以根据业务场景灵活搭配使用。

  6. 消息低延迟

    RocketMQ采用长轮询模式实现准实时的消息推送模式。

  7. 确保消息的消费

    RocketMQ通过消息消费确认机制来确保消息至少被消费一次,但会有重复消费的可能,需要用户自己处理消息的重复消费。

  8. 消息的重试机制

    消息的重试指的是消息在消费时,如果发送异常,可以支持消息的重新投递。

  9. 定时消息

    考虑到性能的影响,RocketMQ只支持指定延迟级别的定时消息,不支持任意精度的定时消息消费。