手机排行榜2024aso安卓优化公司

当前位置: 首页 > news >正文

手机排行榜2024,aso安卓优化公司,河南新闻频道,苏州做网站公司找苏州聚尚网络功能描述 DubboBootstrap是Dubbo的启动类#xff0c;包含服务启动、初始化、预处理配置、销毁清理等核心功能 功能分析 核心DubboBootstrap类分析 主要成员变量分析 private static volatile DubboBootstrap instance; //缓存者启动类的实例对象#xff0c;以static形式…功能描述 DubboBootstrap是Dubbo的启动类包含服务启动、初始化、预处理配置、销毁清理等核心功能 功能分析 核心DubboBootstrap类分析 主要成员变量分析 private static volatile DubboBootstrap instance; //缓存者启动类的实例对象以static形式存储便于其它类调用private final AtomicBoolean awaited new AtomicBoolean(false); //是否等待private final Lock lock new ReentrantLock();private final Condition condition lock.newCondition();private final Lock destroyLock new ReentrantLock(); //销毁清理时用到的锁private final ExecutorService executorService newSingleThreadExecutor();private final EventDispatcher eventDispatcher EventDispatcher.getDefaultExtension(); //事件派发器private final ExecutorRepository executorRepository getExtensionLoader(ExecutorRepository.class).getDefaultExtension(); //线程池仓库private final ConfigManager configManager; //配置管理器private final Environment environment;private ReferenceConfigCache cache; //引用配置的缓存对象private volatile boolean exportAsync; //是否异步暴露private volatile boolean referAsync; //是否异步引用private AtomicBoolean initialized new AtomicBoolean(false); //初始化标识private AtomicBoolean started new AtomicBoolean(false); //启动标识private AtomicBoolean ready new AtomicBoolean(true); //是否已经准备好环境private AtomicBoolean destroyed new AtomicBoolean(false);private volatile ServiceInstance serviceInstance; //服务实例private volatile MetadataService metadataService; //元数据服务private volatile SetMetadataServiceExporter metadataServiceExporters;private ListServiceConfigBase? exportedServices new ArrayList(); //已经暴露的服务列表private ListFuture? asyncExportingFutures new ArrayList(); //异步暴露时使用的Future列表主要成员方法分析 获取DubboBootstrap的实例对象 public static DubboBootstrap getInstance() { //获取实例使用单例模式if (instance null) {synchronized (DubboBootstrap.class) {if (instance null) { //synchronized 双重检查线程安全且缩小锁的范围instance new DubboBootstrap();}}}return instance; }私有的构造函数 private DubboBootstrap() { //私有的构造函数configManager ApplicationModel.getConfigManager(); //config对象的本地配置environment ApplicationModel.getEnvironment(); //获取环境信息DubboShutdownHook.getDubboShutdownHook().register();ShutdownHookCallbacks.INSTANCE.addCallback(new ShutdownHookCallback() { //注册钩子函数当容器停止时对DubboBootstrap进行销毁处理Overridepublic void callback() throws Throwable {DubboBootstrap.this.destroy();}}); }做初始化 public void initialize() { //初始化if (!initialized.compareAndSet(false, true)) {return; //此处initialized为true时进入表明是已经初始化过来就不在初始化}ApplicationModel.initFrameworkExts(); //初始化框架配置startConfigCenter(); //启动配置中心拉取远程的配置写到本地缓存中loadRemoteConfigs(); //加载远程配置包含RegistryConfig、ProtocolConfig、并写到ConfigManager对应的缓存中checkGlobalConfigs(); //检查Config是否正确startMetadataCenter(); //启动元数据中心initMetadataService(); //创建MetadataService实例通过SPI接口WritableMetadataService的实例创建initMetadataServiceExports(); //创建MetadataServiceExporter实例的集合initEventListener(); //将当前对象作为监听器加入到缓存中的监听器列表if (logger.isInfoEnabled()) {logger.info(NAME has been initialized!);} }启动服务 public DubboBootstrap start() {if (started.compareAndSet(false, true)) {ready.set(false); //设置标志值initialize();//初始化处理if (logger.isInfoEnabled()) {logger.info(NAME is starting…);}exportServices(); //暴露服务if (!isOnlyRegisterProvider() || hasExportedServices()) {exportMetadataService(); //暴露元数据registerServiceInstance(); //注册服务到注册中心}referServices(); //引用服务if (asyncExportingFutures.size() 0) { //服务异步暴露后更新启动标志new Thread(() - {try {this.awaitFinish(); //阻塞着等待异步任务完成} catch (Exception e) {logger.warn(NAME exportAsync occurred an exception.);}ready.set(true);if (logger.isInfoEnabled()) {logger.info(NAME is ready.);}}).start();} else { //服务同步暴露后更新启动标志ready.set(true);if (logger.isInfoEnabled()) {logger.info(NAME is ready.);}}if (logger.isInfoEnabled()) { //dubbo启动完成的日志logger.info(NAME has started.);}}return this; }做销毁清理 public void destroy() { //做销毁清理工作包含关联的注册信息、元数据信息、暴露服务信息等if (destroyLock.tryLock()) { //尝试加锁做清理保证线程安全try {DubboShutdownHook.destroyAll(); //停机钩子线程做销毁工作if (started.compareAndSet(true, false) destroyed.compareAndSet(false, true)) { //在服务已启动且未销毁时才做清理unregisterServiceInstance(); //会发起远程调用取消注册的服务比如若注册中心为zookeeper则会通过curator取消注册的服务unexportMetadataService(); //取消元数据暴露unexportServices(); //从ConfigMananer移除暴露的服务缓存unreferServices(); //取消服务引用destroyRegistries(); //销毁注册实例即关闭注册中心客户端以及移除注册实例在本地的缓存DubboShutdownHook.destroyProtocols(); //销毁所有协助并释放协议所在的资源destroyServiceDiscoveries(); //移除服务实例即ServiceDiscovery实例clear(); //清除配置信息shutdown(); //停止运行中的线程池release(); //唤醒所有线程将该执行的任务执行完然后再做释放处理}} finally {destroyLock.unlock();}} }关联GenericEventListener类分析 主要成员变量分析 private final Method onEventMethod; //onEvent(Event)方法对应的Methodprivate final MapClass?, SetMethod handleEventMethods; //维护着事件与事件触发的方法的关系代码解析GenericEventListener是事件监听器维护着事件以及触发事件的方法 主要成员方法分析 查找处理事件的方法 private MapClass?, SetMethod findHandleEventMethods() {MapClass?, SetMethod eventMethods new HashMap();of(getClass().getMethods()).filter(this::isHandleEventMethod) //过滤出符合条件处理事件的方法.forEach(method - {Class? paramType method.getParameterTypes()[0];SetMethod methods eventMethods.computeIfAbsent(paramType, key - new LinkedHashSet());methods.add(method);});return eventMethods; }执行事件对应的方法 public final void onEvent(Event event) { Class? eventClass event.getClass();handleEventMethods.getOrDefault(eventClass, emptySet()).forEach(method - {ThrowableConsumer.execute(method, m - {m.invoke(this, event); //依次执行事件关联的方法});}); }关联EventListener接口分析 SPI FunctionalInterface public interface EventListenerE extends Event extends java.util.EventListener, Prioritized { //事件监听器void onEvent(E event); //事件处理static Class? extends Event findEventType(Class? listenerClass) { //根据监听器Class查找对应的事件Class就是查找 EventListenerE extends Event 中的泛化类型Class? extends Event eventType null;if (listenerClass ! null EventListener.class.isAssignableFrom(listenerClass)) { //isAssignableFrom判断一个类或接口是否是另一个类超类或父接口eventType findParameterizedTypes(listenerClass).stream().map(EventListener::findEventType) //找到事件的实际类型.filter(Objects::nonNull).findAny().orElse((Class) findEventType(listenerClass.getSuperclass())); //若都没找到则找它的父类对应的事件类型}return eventType;}static Class? extends Event findEventType(ParameterizedType parameterizedType) { //根据参数化的类型找到事件类型Class? extends Event eventType null;Type rawType parameterizedType.getRawType(); //获取泛型参数if ((rawType instanceof Class) EventListener.class.isAssignableFrom((Class) rawType)) { //泛型参数为EventListener进行处理Type[] typeArguments parameterizedType.getActualTypeArguments(); //获取实际的参数列表for (Type typeArgument : typeArguments) {if (typeArgument instanceof Class) {Class argumentClass (Class) typeArgument;if (Event.class.isAssignableFrom(argumentClass)) { //找到类型为Event的参数eventType argumentClass;break;}}}}return eventType;} }代码解析EventListener是SPI接口也是函数式接口通过事件监听处理对应的事件类似Handle处理类。该接口继承了java中EventListener因为所有事件监听器接口都必须扩展的标记接口EventListener。 问题点答疑 DubboBootstrap主要负责启动加载哪些信息是从哪里进入到DubboBootStrap类的 解答执行逻辑在DubboBootstrapApplicationListener#onApplicationContextEvent中也就是在spring容器启动后监听容器发布的时间里面有调用dubboBootstrap.start(); dubbo服务的启动方法 DubboBootstrap怎么实现优雅停机 解答通过在创建DubboBootstrap实例时注册钩子函数当容器停止时对DubboBootstrap进行销毁处理会将相关的清理操作处理所有的任务处理完才会关闭服务。 java.util.EventListener的功能用途是啥 解答java中EventListener是一个标记接口java规定所有的事件都要继承该接口。 停机时ShutdownHookCallbacks#addCallback是怎么进入此处的回调方法的 解答在DubboShutdownHook#run线程被执行时就会执行回调方法ShutdownHookCallbacks#callback会依次执行已经注册的List钩子回调接口的callback方法
归纳总结 DubboBootstrap类是Dubbo的启动类主要功能包括 Config配置初始化以及合法性检查服务启动、服务注册、服务引用注册钩子、服务销毁时做清理