聊聊NacosConfigHealthIndicatorAutoConfiguration

  • 2019 年 10 月 11 日
  • 筆記

本文主要研究一下NacosConfigHealthIndicatorAutoConfiguration

NacosConfigHealthIndicatorAutoConfiguration

nacos-spring-boot-project/nacos-config-spring-boot-actuator/src/main/java/com/alibaba/boot/nacos/actuate/autoconfigure/NacosConfigHealthIndicatorAutoConfiguration.java

@Configuration  @ConditionalOnClass({ HealthIndicator.class })  @AutoConfigureBefore({ EndpointAutoConfiguration.class })  @AutoConfigureAfter(NacosConfigAutoConfiguration.class)  @ConditionalOnEnabledHealthIndicator(NacosConfigConstants.ENDPOINT_PREFIX)  public class NacosConfigHealthIndicatorAutoConfiguration {  ​      @Bean      @ConditionalOnMissingBean      public NacosConfigHealthIndicator nacosConfigHealthIndicator() {          return new NacosConfigHealthIndicator();      }  ​  }
  • NacosConfigHealthIndicatorAutoConfiguration註冊了NacosConfigHealthIndicator

NacosConfigHealthIndicator

nacos-spring-boot-project/nacos-config-spring-boot-actuator/src/main/java/com/alibaba/boot/nacos/actuate/health/NacosConfigHealthIndicator.java

public class NacosConfigHealthIndicator extends AbstractHealthIndicator {      @Autowired      private ApplicationContext applicationContext;  ​      private static final String UP_STATUS = "up";  ​      @Override      protected void doHealthCheck(Health.Builder builder) throws Exception {          builder.up();          NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();          for (ConfigService configService : nacosServiceFactory.getConfigServices()) {              if (configService instanceof NacosServiceMetaData) {                  NacosServiceMetaData nacosServiceMetaData = (NacosServiceMetaData) configService;                  Properties properties = nacosServiceMetaData.getProperties();                  builder.withDetail(                          JSON.toJSONString(                                  PropertiesUtils.extractSafeProperties(properties)),                          configService.getServerStatus());              }              if (!configService.getServerStatus().toLowerCase().equals(UP_STATUS)) {                  builder.down();              }          }      }  }
  • NacosConfigHealthIndicator繼承了AbstractHealthIndicator;它會從nacosServiceFactory獲取configService,判斷configService.getServerStatus()是否是up,不是則標記為down;對於NacosServiceMetaData類型的configService,則會獲取nacosServiceMetaData.getProperties()作為key,configService.getServerStatus()作為value寫入到health的details

小結

NacosConfigHealthIndicatorAutoConfiguration註冊了NacosConfigHealthIndicator;NacosConfigHealthIndicator繼承了AbstractHealthIndicator;它會從nacosServiceFactory獲取configService,判斷configService.getServerStatus()是否是up,不是則標記為down;對於NacosServiceMetaData類型的configService,則會獲取nacosServiceMetaData.getProperties()作為key,configService.getServerStatus()作為value寫入到health的details

doc