zoukankan      html  css  js  c++  java
  • 【RocketMQ源码学习】- 1. 入门

    为什么读RocketMQ

    1. 消息队列在互联网应用中使用较为广泛,学习她可以让我门更加了解使用技术的工作原理

    2. 透过学习她的源码,拓宽认知

    3. RocketMQ经历了阿里双十一

    有哪些名词

    • Producer 消息生产者,负责产生消息

    • Consumer 消息消费者,负责消费消息

    • Producer Group 一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致

    • Consumer Group 一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致

    • Push Consumer Consumer 的一种,应用通常向 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立 刻回调 Listener 接口方法。(主动向Consumer推送消息)

    • Pull Consumer Consumer 的一种,应用通常主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制。(由Consumer拉取消息)

    • Broker 消息中转角色,负责存储消息,转发消息

    • NameServer 负责监听和管理生产者、消费者、Broker的注册中心

    • Topic 消息主题,一级消息类型,通过 Topic 对消息进行分类

    • Tag 消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类

    • 集群消费 一个 Group ID 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个 Consumer 实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。

    • 广播消费 一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个 Consumer 实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。

    • 顺序消息 消费消息的顺序要同发送消息的顺序一致,在 RocketMQ 中,主要指的是局部顺序,即一类消息为满足顺 序性,必须 Producer 单线程顺序发送,且发送到同一个队列,这样 Consumer 就可以按照 Producer 发送 的顺序去消费消息。

    • 普通顺序消息 顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker 重启,由于队列 总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。 如果业务能容忍在集群异常情况(如某个 Broker 宕机或者重启)下,消息短暂的乱序,使用普通顺序方 式比较合适。

    代码模块组成, 模块架构图

    项目结构如图

    版本为4.5.2

    • rocketmq-acl: 权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制

    • rocketmq-broker: 负责转发消息, 接收producer发来的消息并存储,同时consumer来这里拉取消息

    • rocketmq-client: 包含了Producer和Consumer,负责消息发送和接收

    • rocketmq-common: 通用的常量枚举、基类方法或者数据结构,按描述的目标来分包通俗易懂

    • rocketmq-distribution:一些 sh 脚本和 配置,主要是在部署的时候用的

    • rocketmq-filter:过滤器,用于服务端 SQL92 的过滤方式

    • rocketmq-logappender: 集成log4、log4j2、logback日志

    • rocketmq-logging: 提供日志的工厂类和方法

    • rocketmq-namesrv: 注册中心,每个 broker 都会在这里注册,client 也会从这里获取 broker 的相关信息

    • rocketmq-openmassageing:

    • rocketmq-remoting: 用Netty4写的客户端和服务端

    • rocketmq-store:存储服务,消息存储,索引存储,commitLog存储

    • rocketmq-ools:命令行工具

    RocketMQ部署结构图

    • Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

    • Broker 部署相对复杂,Broker 分为 Master 与 Slave,一个 Master 可以对应多个 Slave,但是一个 Slave 只能 对应一个 Master,Master 与 Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义,BrokerId 为 0 表示 Master,非 0 表示 Slave。Master 也可以部署多个。每个 Broker 与 Name Server 集群中的所有节 点建立长连接,定时注册 Topic 信息到所有 Name Server。

    • Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路 由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态,可集群部署。

    • Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave 发送心跳。Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

    ======  【多学一点,For Better】======

  • 相关阅读:
    SharePoint缓存配置
    修改默认的个人站点
    生成代码工具
    Ext 布局(layout)
    编程网站
    EXT 4.0 上传文件
    修改Ext grid 单元格
    Ext.tip.Tooltip 提示
    EXT iframe 应用
    EXT 4.0 TreeGrid 使用
  • 原文地址:https://www.cnblogs.com/milicool/p/11708224.html
Copyright © 2011-2022 走看看