rocketmq源码解析笔记

大家好,先安利一下自己,本人男,35岁,已婚。目前就职于小资生活(北京),职位是开发总监。 姓名DaneBrown 好了。我保证本文绝不会太监!转载时请附上以上安利信息。THXALOT。

OK,开始。 因为我没有在rocketmq团队中工作过,只好以一个使用者的角度去思考rocketmq的源码。我使用的是3.2.6版本,其他版本可能略有不同。

我先讲rocketmq-tools

rocketmq-tools

rocketmq-tools是个独立的jar包,所以应该是可以独立执行的。 com.alibaba.rocketmq.tools.admin这个包里面的MQAdminExt是个接口?但是他却是继承自client项目中的MQAdmin? 不管了,往下看。MQAdminExt是整个系统的管理接口。

DefaultMQAdminExt

看文档,这是所有运维方法的汇总,应该是用了faced模式。 看里面最重要的DefaultMQAdminExtImpl类,这个类是实际干活的苦逼。

  1. 这个苦逼的第一个方法是start()。 启动时如果是CREATE_JUST 那么会检查系统变量 rocketmq.client.name 如果这个系统变量名称是DEFAULT,代码就会生成一个PID给instancename。 然后把自己作为一个client注册到MQClientManager中去。可能是为了方便管理吧。也对tools也是一种特殊的客户端。 然后是调用client的start()?看到这里我了然了。原来tools是client的一种实例。

  2. 那不用说了shutdown()也是调用的client的shudown。 后面的自己看吧,简直就是client的花式吊打经典案例。

com.alibaba.rocketmq.tools.admin.api

没啥可说的,就是一个bean和一个枚举。拜了个拜

说说com.alibaba.rocketmq.tools.command

这个项目的启动类是MQAdminStartup

MQAdminStartup

注意!rocketmq启动的时候,会检测fastjson的版本! 注意!rocketmq启动的时候,会检测fastjson的版本! 注意!rocketmq启动的时候,会检测fastjson的版本! 重要的事情重复三遍

然后是初始化各种命令,参考initCommand 方法。 典型的command模式!done!

SubCommand

就是个接口。定义了命令的名称、描述、构造Options(这个是build模式),execute方法(典型的cmd模式) 这些subcommand中使用的,都是之前咱们提到的DefaultMQAdminExt中的方法。

总结:这个项目比较简单。 最重要的几个类: 1. DefaultMQAdminExtImpl 2. MQAdminStartup 3. SubCommand 接口 4. 各个具体SubCommand的实现(太多了,自己看吧,简直就是对mq的花式吊打)

ROCKETMQ源码分析笔记1:tools的更多相关文章

  1. ROCKETMQ源码分析笔记2:client

    CLIENT 之前讲过tools里面有大量调用client的东西.为了从源码层面了解rocket,决定啃下client这块骨头. pom 先看pom,看看CLIENT依赖谁.看完后原来是依赖commo ...

  2. RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?

    目录 RocketMQ 源码学习笔记----Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest ...

  3. RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?

    目录 RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest Roc ...

  4. zeromq源码分析笔记之线程间收发命令(2)

    在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socke ...

  5. RocketMQ 源码分析 —— Message 发送与接收

    1.概述 Producer 发送消息.主要是同步发送消息源码,涉及到 异步/Oneway发送消息,事务消息会跳过. Broker 接收消息.(存储消息在<RocketMQ 源码分析 —— Mes ...

  6. ReentrantReadWriteLock源码分析笔记

    ReentrantReadWriteLock包含两把锁,一是读锁ReadLock, 此乃共享锁, 一是写锁WriteLock, 此乃排它锁. 这两把锁都是基于AQS来实现的. 下面通过源码来看看Ree ...

  7. RocketMQ源码分析之从官方示例窥探:RocketMQ事务消息实现基本思想

    摘要: RocketMQ源码分析之从官方示例窥探RocketMQ事务消息实现基本思想. 在阅读本文前,若您对RocketMQ技术感兴趣,请加入RocketMQ技术交流群 RocketMQ4.3.0版本 ...

  8. ArrayList源码分析笔记

    ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...

  9. 【RocketMQ源码分析】深入消息存储(3)

    前文回顾 CommitLog篇 --[RocketMQ源码分析]深入消息存储(1) ConsumeQueue篇 --[RocketMQ源码分析]深入消息存储(2) 前面两篇已经说过了消息如何存储到Co ...

随机推荐

  1. iscroll 加载不全解决方案

    例如上图中,get_kaijiang 中如果执行一段ajax跨域传输的话 function get_kaijiang(){ ajax------- $('#div').append(html); -- ...

  2. html中submit和button的区别/ window.location.href 不跳转 的问题

    <input type="button">  <input type="submit"> 这两个的区别 是 button 不会自动提交表 ...

  3. 使用Python写Windows Service服务程序

    1.背景 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32 ...

  4. 什么是ValueStack

    转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...

  5. C语言 ---- 指针 iOS学习-----细碎知识点总结

    内存的访问形式:1.直接访问:通过变量名进行访问.2.间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间. 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址    ...

  6. 使用async 和 await方法来

    先看直接的代码请求方式地啊: 这里是我们同步方法的实现: using System; using System.Collections.Generic; using System.Diagnostic ...

  7. 【转载】LoadRunner添加windows多台压力机

    添加多台压力机 1.前置条件 1)保证压力机上都安装了loadrunner Agent,并启动,状态栏中会有小卫星. 2)添加的压力机与controller所在机器是否在同一个网段,建议关闭防火墙.在 ...

  8. R12.2 URL Validation failed. The error could have been caused through the use of the browser's navigation buttons

    EBS升级到R12.2.4后,进入系统操作老是报以下错误: 通过谷歌发现有人遇到相同的问题,并提供了解决方案. 原文地址:http://onlineappsdbaoracle.blogspot.com ...

  9. Linux(ubanto):可以ping通IP,但不能ping通域名

    打开/etc/resolv.conf文件 vi /etc/resolv.conf 插入一下两行保存即可 nameserver 8.8.8.8 nameserver 8.8.4.4

  10. Chrome console命令整理

    console.dir (这个方法是我经常使用的 可不知道比for in方便了多少) 直接将该DOM结点以DOM树的结构进行输出,可以详细查对象的方法发展等等 在页面右击选择 审查元素 ,然后在弹出来 ...