• 深入理解RocketMQ(一)---阅读源码准备


    本文主要描述使用Idea获取rocketMQ源码及源码的读取。

    在演示搭建源码环境前,先简要描述一下RocketMQ的设计目标。

    1、架构模式

      和大多数消息中间件一样,采用的是发布订阅模式,基本组件包括:消息发送者、消息服务器(消息存储)、消息消费和路由发现

    2、顺序消息

      rocketMQ保证严格的顺序消息(消息到达服务器的时间)

    3、消息过滤

      rocketMQ既支持在broker端的消息过滤,也支持在消费端的消息过滤

    4、消息存储

      rocketMQ引入了内存机制,保证消息存储的高性能;同时将所有的topic数据存在一个文件中,保证查找消息的高效率;同时为了避免文件积累,引入了文件过期机制和存储空间报警机制。

    5、消息高可用

      rocketMQ使用同步刷盘保证了异常宕机情况下数据不丢失,异步刷盘可能有少量数据丢失;单点故障情况,如果开启异步复制机制,则能保证只丢少量数据;后续会引入双写机制,以满足可靠性极高的场合。

    6、消息到底低延迟

      RocketMQ在不发生消息堆积时,以长轮询模式实现准实时的消息推送模式。

    7、确保消息必须被消费一次

      通过消息消费确认机制(ACK)来确保消息至少被消费一次(由于ACK信息可能会丢失等原因,所以rocket MQ无法做到准确的只被消费一次,因此有可能会有重复消费的可能)

    8、回溯消息

      rocketMQ支持按时间的消息回溯(已经被消费的数据,可以重新进行消费),可以精确到毫秒

    9、消息堆积

      rocketMQ使用的是磁盘存储,同时使用了内存映射机制,并且存储的物理文件为多个大小相等的逻辑文件,只要磁盘够大,就可以无限存储(实际上,如第4点所述,rocketMQ还提供了文件过期机制和存储空间报警机制,默认保留3天)

    10、定时消息

      定时消息实际就是不立即消费的消息,到达一定时间后才会被消费,rocketMQ不支持任意进度的定时消息,而只zhi'chi特定的延迟级别(这是因为特定的延迟级别会有对应的队列)

    11、消息重试机制

      消息如果被消费失败,则会重新投递消息

    然后就是搭建阅读源码环境

    1、获取源码

      VCS  -->  Checkout from Version Control  --> Git

     输入git地址:https://github.com/apache/rocketmq.git ,由于我是将项目fork到我本人的gitHub目录下,所以我这里添加我自己的git地址:https://github.com/menglongdeye/rocketmq.git

     gitHub  reocketMQ项目地址:https://github.com/apache/rocketmq

    然后选择Maven

    直接下一步

     勾选JDK8,下一步

     继续下一步

     继续下一步

     完成

     编辑和下载依赖包

     

    RocketMQ核心目录说明:

    (1)acl:访问控制,包含用户、资源、权限、角色等信息。

    (2)broker:broker模块(broker启动进程)

    (3)client:消息客户端,包含消息生产者、消费者相关类

    (4)common:公共包

    (5)dev:开发者信息(非源码)

    (6)distribution:部署实例文件夹(非源码)

    (7)docs:存储对各个模块的说明和一些流程图片,分为中文和英文两种语音描述

    (8)example:示例代码

    (9)filter:消息过滤基础类

    (10)logappender:日志实现相关类

    (11)namesrv:namesrv相关实现类(NameSrv启动进程)

    (12)openmessaging:消息开放标准

    (13)remoting:远程通信模块,基于Netty

    (14)srvutil:服务器工具类

    (15)store:消息存储实现类相关

    (16)style:checkstyle相关实现

    (17)test:测试相关类

    (18)tools:工具类,监控命令相关实现类

     2、调试源码

    启动nameSrv

    配置ROCKETMQ_HOME

    name 为 ROCKETMQ_HOME, value为源码保存路径(与源码目录同层级)

     

     在 ROCKETMQ_HOME创建 conf、logs、store三个文件夹

    将distribution项目中broker.conf、logback_namesrv.xml和logback_broker.xml复制到刚才创建的conf文件夹下。

    修改broker.conf配置文件,新增以下配置项

    # 存储路径
    storePathRootDir=D:\workSpace\store
    # commitlog存储路径
    storePathCommitLog=D:\workSpace\store\commitlog
    # 消费队列存储路径
    storePathConsumeQueue=D:\workSpace\store\comsumequeue
    # 消息索引存储位置
    storePathIndex=D:\workSpace\store\index
    # checkpoint文件存储位置
    storeCheckPoint=D:\workSpace\store\checkpoint
    # abort文件存储位置
    abortFile=D:\workSpace\store\abort

    namesrvAddr=127.0.0.1:9876

    启动namesrv,当输出 The Name Server boot success. serializeType=JSON 时,说明启动成功。

     3、启动broker

    配置ROCKETMQ_HOME和broker配置文件

     启动成功(会显示链接nameSrv的地址)

     4、使用rocketmq提供的样例发送消息和消费消息

    (1)发送消息

        更改examplesrcmainjavaorgapache ocketmqexamplequickstartProducer.java 中 namesrv地址

     启动

     (2)消费消息

      启动D:workSpace ocketMQexamplesrcmainjavaorgapache ocketmqexamplequickstartConsumer.java(需要配置namesrv地址)

     可以看到消息消费成功。

  • 相关阅读:
    bzoj3109【CQOI2013】新数独
    HDU 1015 Safecracker(第一次用了搜索去遍历超时,第二次用for循环能够了,思路一样的)
    从头认识java-15.1 填充容器(3)-填充Map
    写一个python的服务监控程序
    javaScript定义函数的三种方式&变量的作用域
    android开发中应该注意的问题
    某技术大牛的帖子(android项目总结)
    android命名规范
    GitHub使用教程for Eclipse
    Android内存性能优化(内部资料总结)
  • 原文地址:https://www.cnblogs.com/liconglong/p/12549659.html
Copyright © 2020-2023  润新知