シーケンス
本稿では、NacosDiscoveryEndpointsAutoConfigurationを見ます
NacosDiscoveryEndpointsAutoConfiguration
ナコススプリング・ブート・プロジェクト/ナコス発見スプリング・ブート・アクチュエータ/ srcに/メイン/ javaの/ COM /アリババ/ブーツ/ナコス/発見/作動/自動設定/ NacosDiscoveryEndpointsAutoConfiguration.java
@Configuration
public class NacosDiscoveryEndpointsAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnEnabledEndpoint
public NacosDiscoveryEndpoint nacosDiscoveryEndpoint() {
return new NacosDiscoveryEndpoint();
}
}
复制代码
- NacosDiscoveryEndpointsAutoConfigurationはNacosDiscoveryEndpointを登録しました
NacosDiscoveryEndpoint
ナコススプリング・ブート・プロジェクト/ナコス発見スプリング・ブート・アクチュエータ/ srcに/メイン/ javaの/ COM /アリババ/ブーツ/ナコス/発見/作動/エンドポイント/ NacosDiscoveryEndpoint.java
@Endpoint(id = NacosDiscoveryConstants.ENDPOINT_PREFIX)
public class NacosDiscoveryEndpoint {
@Autowired
private ApplicationContext applicationContext;
private static final Integer PAGE_SIZE = 100;
@ReadOperation
public Map<String, Object> invoke() {
Map<String, Object> result = new HashMap<>();
result.put("nacosDiscoveryGlobalProperties",
PropertiesUtils.extractSafeProperties(applicationContext.getBean(
DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME, Properties.class)));
NacosServiceFactory nacosServiceFactory = CacheableEventPublishingNacosServiceFactory.getSingleton();
JSONArray array = new JSONArray();
for (NamingService namingService : nacosServiceFactory.getNamingServices()) {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("servicesOfServer",
namingService.getServicesOfServer(0, PAGE_SIZE));
jsonObject.put("subscribeServices", namingService.getSubscribeServices());
array.add(jsonObject);
}
catch (Exception e) {
jsonObject.put("serverStatus", namingService.getServerStatus() + ": "
+ NacosUtils.SEPARATOR + e.getMessage());
}
}
result.put("namingServersStatus", array);
return result;
}
}
复制代码
- NacosDiscoveryEndpointは読み出し動作を提供し、それはnacosDiscoveryGlobalPropertiesとnamingServersStatus内部マップに戻り、namingServersStatus JSONArrayであり、各要素はJSONArray JSONObject、JSONObjectがservicesOfServer、subscribeServicesである;ここnamingService.getServicesOfServer(0、PAGE_SIZE)のPAGE_SIZEによって得られるservicesOfServer 100
NacosDiscoveryBeanDefinitionRegistrar
ナコススプリング・コンテキスト-0.3.3-sources.jar!/com/alibaba/nacos/spring/context/annotation/discovery/NacosDiscoveryBeanDefinitionRegistrar.java
public class NacosDiscoveryBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware {
private Environment environment;
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AnnotationAttributes attributes = AnnotationAttributes.fromMap(
importingClassMetadata.getAnnotationAttributes(EnableNacosDiscovery.class.getName()));
// Register Global Nacos Properties Bean
registerGlobalNacosProperties(attributes, registry, environment, DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME);
// Register Nacos Common Beans
registerNacosCommonBeans(registry);
// Register Nacos Discovery Beans
registerNacosDiscoveryBeans(registry);
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
}
复制代码
- NacosDiscoveryBeanDefinitionRegistrarはその後registerGlobalNacosPropertiesによってDISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAMEメソッドを登録し、ImportBeanDefinitionRegistrar、registerBeanDefinitionsはimportingClassMetadataから属性のEnableNacosDiscoveryを取得EnvironmentAwareインターフェースを実現しました
NacosBeanUtils
ナコススプリング・コンテキスト-0.3.3-sources.jar!/com/alibaba/nacos/spring/util/NacosBeanUtils.java
public abstract class NacosBeanUtils {
//......
public static void registerGlobalNacosProperties(AnnotationAttributes attributes,
BeanDefinitionRegistry registry,
PropertyResolver propertyResolver,
String beanName) {
if (attributes == null) {
return; // Compatible with null
}
AnnotationAttributes globalPropertiesAttributes = attributes.getAnnotation("globalProperties");
registerGlobalNacosProperties((Map<?, ?>) globalPropertiesAttributes, registry, propertyResolver,
beanName);
}
public static void registerGlobalNacosProperties(Map<?, ?> globalPropertiesAttributes,
BeanDefinitionRegistry registry,
PropertyResolver propertyResolver,
String beanName) {
Properties globalProperties = resolveProperties(globalPropertiesAttributes, propertyResolver);
registerSingleton(registry, beanName, globalProperties);
}
public static void registerSingleton(BeanDefinitionRegistry registry, String beanName, Object singletonObject) {
SingletonBeanRegistry beanRegistry = null;
if (registry instanceof SingletonBeanRegistry) {
beanRegistry = (SingletonBeanRegistry) registry;
} else if (registry instanceof AbstractApplicationContext) {
// Maybe AbstractApplicationContext or its sub-classes
beanRegistry = ((AbstractApplicationContext) registry).getBeanFactory();
}
// Register Singleton Object if possible
if (beanRegistry != null) {
// Determine in advance whether injected with beans
if (!beanRegistry.containsSingleton(beanName)) {
beanRegistry.registerSingleton(beanName, singletonObject);
}
}
}
//......
}
复制代码
- AnnotationAttributesからAnnotationAttributesのglobalPropertiesのNacosBeanUtilsのregisterGlobalNacosProperties、registerGlobalNacosPropertiesによってパースAnnotationAttributesの後、属性、最終的にはregisterSingletonを得るための方法
概要
NacosDiscoveryEndpointsAutoConfigurationはNacosDiscoveryEndpointを登録し、NacosDiscoveryEndpointは読み出し動作を提供し、それはnacosDiscoveryGlobalPropertiesとnamingServersStatus内部マップに戻り、namingServersStatus JSONArrayであり、各要素はJSONArray JSONObject、JSONObjectがservicesOfServer、subscribeServicesである;ここnamingService.getServicesOfServer(0、PAGE_SIZEによってservicesOfServer )買収、PAGE_SIZE 100