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. js出错总结

    1 没有</script>  src="js" "./js" "../js"2 dom对象与jquery对象(jquery对象其 ...

  2. 延时调用的php代码

    比如我们想做一个类似于康盛uchome的定时触发任务,任务靠用户访问触发的,但是你触发任务是不能影响用户本身对页面的访问速度(也就是说不能任务执行十秒钟你就让用户等待十秒钟)刚好昨天把这个弄完了.拿出 ...

  3. 采用阿里的API进行动态域名解析

    #!/usr/bin/env python # -*- coding:utf-8 -*- import os from aliyunsdkcore import client from aliyuns ...

  4. Python开发【前端】:Ajax

    Ajax Ajax即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = ...

  5. __attribute__

    转来的: http://www.cnblogs.com/astwish/p/3460618.html __attribute__ 你知多少? GNU C 的一大特色就是__attribute__ 机制 ...

  6. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  7. HandlerMapping的3种访问形式

    1.根据BeanName访问Controller 2.根据简单URL访问 3.根据Controller类名访问

  8. python 数据库

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但 ...

  9. WPF中Grid绑定DataTable数据。

    1.首先引用DocumentFormat.OpenXml.dll 2.然后新建一个OpenExcelHelper类,将Excel转化为Datatable. /// <summary>    ...

  10. BaseAdapter日常的封装

    我们日常开发中BaseAdapter使用非常的多,大家有没有想过,再进一步封装,将平常使用的对象集合,利用泛型放入集合中,再也不用每次都重写那几个方法了,当然我也提供我的下载地址(https://gi ...