一起养成写作习惯!这是我参与「掘金日新计划 · 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:工具类,监控命令相关实现类
RocketMQ的设计目标
-
架构模式
RocketMQ采用发布订阅模式,核心组件包括消息生产者、消息存储、消息消费者、服务的发现等
-
顺序消息
RocketMQ支持顺序消息消费,对于在同一个消息队列里消息是有序的,属于是局部顺序。
-
消息过滤
RocketMQ支持消息的过滤,可以在Broker端进行消息的过滤,只发送消息者感兴趣的消息。
-
消息存储
消息中间件的核心就是消息的存储,两个维度的考量:消息堆积能力和消息的消费能力。
RocketMQ采用顺序写、随机读。
追求消息的存储高性能,引入内存映射的机制,所有主题的消息存储在同一个文件中。
为了避免消息的无限堆积,引入过期消息机制(消息只存储3天)和文件存储空间报警机制。
-
消息的高可用性
RocketMQ可以灵活地选择同步刷盘或异步刷盘,主从同步复制或异步复制,以及多副本机制,用户可以根据业务场景灵活搭配使用。
-
消息低延迟
RocketMQ采用长轮询模式实现准实时的消息推送模式。
-
确保消息的消费
RocketMQ通过消息消费确认机制来确保消息至少被消费一次,但会有重复消费的可能,需要用户自己处理消息的重复消费。
-
消息的重试机制
消息的重试指的是消息在消费时,如果发送异常,可以支持消息的重新投递。
-
定时消息
考虑到性能的影响,RocketMQ只支持指定延迟级别的定时消息,不支持任意精度的定时消息消费。