rocketMq-Topic创建过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rocketMq-Topic创建过程相关的知识,希望对你有一定的参考价值。

参考技术A rocketMq概念介绍

rocketMq-namesrv介绍

rocketMq-Topic创建过程

rocketMq-producer介绍

rocketMq-consumer介绍

rocketMq - rebalance介绍

rocketMq - 并发消费过程

rocketMq - 串行消费过程

rocketMq-broker介绍

rocketMq-broker消息存储介绍

rocketMq - commitLog

rocketMq - index介绍

rocketMq-延迟消息介绍

rocketMq-事务消息介绍

rocketMq消息查询

rocketMq和kafka的架构区别

rocketMq - master/slave同步

Topic可以理解为在rocketMq体系当中作为一个逻辑消息组织形式,一般情况下一类业务消息会申请一个topic来实现业务之间隔离。

说明:

    该图分享自:  RocketMQ概念模型

    Topic是一个逻辑上的概念,实际上在每个broker上以queue的形式保存,也就是说每个topic在broker上会划分成几个逻辑队列,每个逻辑队列保存一部分消息数据,但是保存的消息数据实际上不是真正的消息数据,而是指向commit log的消息索引。

    Topic创建的时候可以用集群模式去创建(这样集群里面每个broker的queue的数量相同),也可以用单个broker模式去创建(这样每个broker的queue数量可以不一致)。

    每个broker上的角色是等同的,也就是说每个broker上面的queue保存了该topic下一部分消息,注意是一部分而不是全量消息。

说明:

    在rocketMq编译后的bin目录下有一个mqadmin的工具,该工具作为rocketMq的CLI工具对外提供,使用时候可以通过sh mqadmin -h 或者sh mqadmin command -h查看用法。

    updateTopic和deleteTopic是实际中操作topic的命令。

说明:

    创建topic需要指定的参数,

    -b 指定broker上创建topic

    -c 指定cluster创建topic

    -n 指定namesrv地址,cluster模式下必须从namesrv获取broker地址

    -t topic的名字标志

    -r/w 读写队列的个数,建议相等

    -p queue的读写权限

    -o 待研究不确定是不是保证全局有序消息的配置

说明:

    topic的创建过程涉及到3个组件,分别是mqadmin、broker、namesrv。

    整个创建过程是mqadmin->broker->namesrv。

    mqadmin通知broker创建topic和对应的queue信息。

    broker转发通知namesrv保存topic和broker的原信息,同时在本地持久化一份topic配置。

    broker在这个时候不真正创建本地的队列信息

说明:

    参见 UpdateTopicSubCommand类

    注册参数和updateTopic显示帮助是一致的

说明:

    支持cluster模式下创建topic和支持broker模式下创建topic

说明:

    通知broker创建topic。

说明:

    集群模式下首先通过namesrv获取所有的broker的master地址,然后通知每个broker去创建topic,每个broker的创建过程跟指定单个broker是一致的。

说明:

    参见AdminBrokerProcessor类

说明:

    broker本地通过updateTopicConfig保存topic的配置信息并持久化

    broker通过registerBrokerAll通知namesrv保存topic信息

说明:

    broker通知namesrv注册该broker下的topic信息,具体的namesrv地址是在registerBrokerAll内部访问namesrv获取的。

说明:

    参见DefaultRequestProcessor类

说明:

    参见DefaultRequestProcessor类

说明:

    参见RouteInfoManager类

Activity启动过程记录

参考技术A 当目标Activity所属的进程已创建,则下一步调用到AT.scheduleResumeActivity;

当目标Activity所属的进程未创建,则先创建进程后,再调用AT.scheduleLaunchActivity

将Window相应task移至顶部,并创建AppWindowToken对象

创建LoadedApk对象;

创建ComponentName对象;

获取ClassLoader;

创建目标Activity对象;

创建Application对象;

回调onCreate(),一般地该方法内执行setContentView()操作;

获取activity的WindowManager

把actvitity的decorview设置INVISIBLE添加上去addview->mWindowSession.addToDisplay->WMS.addWindow

makeVisible

activityResumed

updateFocusedWindowLocked来更新聚焦窗口情况

AMS通过binder最终通知ApplicationThread,进而通知主线程,ActivityThread通过H.handleMessage()来控制Activity的生命周期。

    ActivityThread.handleConfigurationChanged

    Application.onCreate

    Activity.onCreate

    Activity.onRestoreInstanceState

    Activity.onRestart

    Activity.onStart

    Activity.onResume

    Activity.onRestart

    Activity.onStart

    Activity.onResume

    Activity.onSaveInstanceState

    Activity.onPause

    Activity.onSaveInstanceState

    Activity.onStop

    trimApplications() kill空进程并且更新进程的Adj值

    Activity.onDestroy

    检查第一个没有结束的activity 如没有显示launcher

    Activity.onPause

    Activity.onNewIntent

    Activity.onRestart

    Activity.onStart

    Activity.onResume

以上是关于rocketMq-Topic创建过程的主要内容,如果未能解决你的问题,请参考以下文章

rocketmq 命令示例

消息队列概述

软件开发中间件和插件

RocketMQ

分布式系统之消息队列

搭建 Apache RocketMQ 单机环境