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. RocketMQ源码分析之RocketMQ事务消息实现原理上篇(二阶段提交)

    在阅读本文前,若您对RocketMQ技术感兴趣,请加入 RocketMQ技术交流群 根据上文的描述,发送事务消息的入口为: TransactionMQProducer#sendMessageInTra ...

  9. 线程池之ThreadPoolExecutor线程池源码分析笔记

    1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...

随机推荐

  1. 怎样关闭google的自动更新

    谷歌的自动更新很烦人的,只要你点击关于Google Chrome,谷歌就会自动更新成最新版本. 但是sencha框架好像与谷歌29.0以上的兼容性不是很好,所以关闭谷歌自动更新的需求来了,网上很多人说 ...

  2. ubuntu安装和查看已安装

    说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装.卸载和删除的方法. 一.U ...

  3. jqury.jqzoom插件--放大镜

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. 表视图控制器(TableViewController)(二)

    1 tableView的编辑模式 1.1 问题 表视图可以进入编辑模式,当进入编辑模式就可以进行删除.插入.移动单元等操作,本案例还是使用联系人界面学习如何进入编辑模式,以及进入编辑模式之后的删除.插 ...

  5. docker articles&amp;videos

    https://github.com/docker/docker https://channel9.msdn.com/Blogs/containers?page=2 https://blog.dock ...

  6. android Studio 快捷键(转载)

    http://www.cnblogs.com/ut2016-progam/p/5627142.html http://blog.csdn.net/shulianghan/article/details ...

  7. python 常用数据结构使用

    python 字典操作 http://www.cnblogs.com/kaituorensheng/archive/2013/01/24/2875456.html python 字典排序 http:/ ...

  8. Uva 10288 Coupons

    Description Coupons in cereal boxes are numbered \(1\) to \(n\), and a set of one of each is require ...

  9. 237. Delete Node in a Linked List(C++)

    237. Delete Node in a Linked Lis t Write a function to delete a node (except the tail) in a singly l ...

  10. last期末作业

    功能:每人完成一个新闻发布系统,包括系统的前台访问和后台管理. 要求: 1.使用ASP.NET MVC4开发. 2.在完成基本功能后,可以利用本学期所学的知识进行扩展. 3.完成日期为2013年12月 ...