[pravega-012] pravega源码分析--Controller子项目-- 主服务ControllerServiceMain

1.主服务启动前,需要读取多个配置,源码如下:

            ZKClientConfig zkClientConfig = ZKClientConfigImpl.builder()
                    .connectionString(Config.ZK_URL)
                    .secureConnectionToZooKeeper(Config.SECURE_ZK)
                    .namespace("pravega/" + Config.CLUSTER_NAME)
                    .initialSleepInterval(Config.ZK_RETRY_SLEEP_MS)
                    .maxRetries(Config.ZK_MAX_RETRIES)
                    .sessionTimeoutMs(Config.ZK_SESSION_TIMEOUT_MS)
                    .build();

            StoreClientConfig storeClientConfig = StoreClientConfigImpl.withZKClient(zkClientConfig);

            HostMonitorConfig hostMonitorConfig = HostMonitorConfigImpl.builder()
                    .hostMonitorEnabled(Config.HOST_MONITOR_ENABLED)
                    .hostMonitorMinRebalanceInterval(Config.CLUSTER_MIN_REBALANCE_INTERVAL)
                    .containerCount(Config.HOST_STORE_CONTAINER_COUNT)
                    .hostContainerMap(HostMonitorConfigImpl.getHostContainerMap(Config.SERVICE_HOST,
                            Config.SERVICE_PORT, Config.HOST_STORE_CONTAINER_COUNT))
                    .build();

            TimeoutServiceConfig timeoutServiceConfig = TimeoutServiceConfig.builder()
                    .maxLeaseValue(Config.MAX_LEASE_VALUE)
                    .build();

            ControllerEventProcessorConfig eventProcessorConfig = ControllerEventProcessorConfigImpl.withDefault();

            GRPCServerConfig grpcServerConfig = Config.getGRPCServerConfig();

            RESTServerConfig restServerConfig = RESTServerConfigImpl.builder()
                    .host(Config.REST_SERVER_IP)
                    .port(Config.REST_SERVER_PORT)
                    .build();

            ControllerServiceConfig serviceConfig = ControllerServiceConfigImpl.builder()
                    .threadPoolSize(Config.ASYNC_TASK_POOL_SIZE)
                    .storeClientConfig(storeClientConfig)
                    .hostMonitorConfig(hostMonitorConfig)
                    .controllerClusterListenerEnabled(true)
                    .timeoutServiceConfig(timeoutServiceConfig)
                    .eventProcessorConfig(Optional.of(eventProcessorConfig))
                    .grpcServerConfig(Optional.of(grpcServerConfig))
                    .restServerConfig(Optional.of(restServerConfig))
                    .build();

2.ControllerServiceMain是 com.google.common.util.concurrent.AbstractExecutionThreadService的子类。com.google.common.util.concurrent是google的多线程工具包,是google开源项目guava的一部分。

            ControllerServiceMain controllerServiceMain = new ControllerServiceMain(serviceConfig);
            controllerServiceMain.startAsync();
            controllerServiceMain.awaitTerminated();

startAsync函数和awaitTerminated函数,是从父类继承而言,不需要ControllerServiceMain类实现。因此主要启动服务在ControllerServiceMain类内部。

3.ControllerServiceMain的业务逻辑

源码在ControllerServiceMain.java文件,主要是run函数。在run函数,while循环里,启动一个starter,然后starter只负责启动和关闭各种服务,在正常运行状态时没有操作,starter启动各种服务后,进入join状态。如果ControllerServericeMain遇到终止条件,while循环结束,服务终止。

这里比较重要的是,是guava的concurrent包的service框架,需要仔细研究分析。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值