(1). 概述

前面对Broker进行了剖析,在这里主要剖析:BrokerStartupProcess.

(2). BrokerStartupProcess构建器

public BrokerStartupProcess(final BrokerStartupContext brokerStartupContext) {
	// 并发控制器
    concurrencyControl = brokerStartupContext.getConcurrencyControl();
    context = brokerStartupContext;

    final var brokerStepMetrics = new BrokerStepMetrics();
    
	// **********************************************************
	// 1. 构建启动步骤,从变量命名上来看,就知道这是一个未经装饰的StartupStep,意味着:后面应该有装饰的StartupStep
	// **********************************************************
    final var undecoratedSteps = buildStartupSteps(brokerStartupContext.getBrokerConfiguration());


    // **********************************************************
	// 2. 通过BrokerStepMetricDecorator Wrapper前面的:StartupStep
	// **********************************************************
    final var decoratedSteps =
        undecoratedSteps.stream()
            .map(step -> new BrokerStepMetricDecorator(brokerStepMetrics, step))
            .collect(Collectors.toList());
			
    // **********************************************************
	// 3. StartupProcess包裹着所有的:StartupStep
	// **********************************************************
    startupProcess = new StartupProcess<>(LOG, decoratedSteps);
} // end 构建器

(3). buildStartupSteps

buildStartupSteps的作用主要是用来配置:StartupStep,这个类是核心类,下一篇会进行详细剖析.

private List<StartupStep<BrokerStartupContext>> buildStartupSteps(final BrokerCfg config) {
    final var result = new ArrayList<StartupStep<BrokerStartupContext>>();

    if (config.getData().isDiskUsageMonitoringEnabled()) {
	  // 磁盘使用情况管理
      result.add(new DiskSpaceUsageMonitorStep());
    }
	
    result.add(new MonitoringServerStep());
	// BrokerAdmin管理
    result.add(new BrokerAdminServiceStep());

	// Atomix集群管理
    result.add(new ClusterServicesStep());
	
	// API管理
    result.add(new ApiMessagingServiceStep());
    result.add(new CommandApiServiceStep());
    result.add(new AdminApiServiceStep());
    result.add(new SubscriptionApiStep());
    result.add(new LeaderManagementRequestHandlerStep());

    if (config.getGateway().isEnable()) {
		// 内嵌Gateway管理
      result.add(new EmbeddedGatewayServiceStep());
    }

    // 分区管理
    result.add(new PartitionManagerStep());

    return result;
} // end buildStartupSteps

(4). 设计模式

在这里的代码剖析能看出来,Zeebe运用了:装饰器模式.

(5). 总结

通过对代码的分析,能知道BrokerStartupProcess内部主要是配置:StartupStep(这个类下一小篇进行剖析),并通过:StartupProcess Hold住所有的StartupStep.