話NacosDiscoveryEndpointsAutoConfiguration

シーケンス

本稿では、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

ドキュメント

おすすめ

転載: juejin.im/post/5d8a3149e51d4577f208e382