开发者社区 > 云原生 > 正文

请问 nacos 2021.0.1.0版本怎么拿到NacosNamingService呢?

请问nacosRegistration没有getNacosNamingService方法了,2021.0.1.0版本怎么拿到NacosNamingService呢?

展开
收起
哈喽!小陈 2022-07-25 13:06:31 686 0
2 条回答
写回答
取消 提交回答
  • 配置类中设计到的几个bean:NacosServiceRegistry 、NacosRegistration 、NacosAutoServiceRegistration 、AutoServiceRegistrationConfiguration

    NacosServiceRegistry : 实现服务的注册逻辑

    NacosRegistration : 通过 NacosRegistrationCustomizer 实现类定制化服务

    NacosAutoServiceRegistration : 服务启动后自动注册的入口

    AutoServiceRegistrationConfiguration : 用于注册 AutoServiceRegistrationProperties``

    @Configuration(proxyBeanMethods = false)
    @EnableConfigurationProperties
    @ConditionalOnNacosDiscoveryEnabled
    # 默认开启服务自动注册
    @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
            matchIfMissing = true)
    @AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class,
            AutoServiceRegistrationAutoConfiguration.class,
            NacosDiscoveryAutoConfiguration.class })
    public class NacosServiceRegistryAutoConfiguration {
    
        @Bean
        public NacosServiceRegistry nacosServiceRegistry(
                NacosDiscoveryProperties nacosDiscoveryProperties) {
            return new NacosServiceRegistry(nacosDiscoveryProperties);
        }
    
        @Bean
        @ConditionalOnBean(AutoServiceRegistrationProperties.class)
        public NacosRegistration nacosRegistration(
                ObjectProvider<List<NacosRegistrationCustomizer>> registrationCustomizers,
                NacosDiscoveryProperties nacosDiscoveryProperties,
                ApplicationContext context) {
            return new NacosRegistration(registrationCustomizers.getIfAvailable(),
                    nacosDiscoveryProperties, context);
        }
    
        @Bean
        @ConditionalOnBean(AutoServiceRegistrationProperties.class)
        public NacosAutoServiceRegistration nacosAutoServiceRegistration(
                NacosServiceRegistry registry,
                AutoServiceRegistrationProperties autoServiceRegistrationProperties,
                NacosRegistration registration) {
            return new NacosAutoServiceRegistration(registry,
                    autoServiceRegistrationProperties, registration);
        }
    
    }
    

    ——参考链接

    2023-11-30 21:04:59
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    Nacos 2021.0.1.0 版本中,您可以通过以下方式获取 NacosNamingService:

    1. 首先,确保您的项目中已经添加了 Nacos 相关的依赖。对于 Maven 项目,您可以在 pom.xml 文件中添加以下依赖:


    com.alibaba.nacos
    nacos-client
    2021.0.1.0

    CopyCopy

    1. 在您的项目中创建一个 Nacos 客户端实例,并初始化 Nacos 服务地址、应用名称、IP地址等信息。以下是一个创建 Nacos 客户端的示例:

    import com.alibaba.nacos.api.annotation.NacosInjected;
    import com.alibaba.nacos.api.naming.NamingService;
    import com.alibaba.nacos.api.naming.client.DefaultNamingClient;
    import com.alibaba.nacos.api.naming.client.NamingClient;
    import com.alibaba.nacos.config.annotation.NacosInjected;
    import com.alibaba.nacos.config.client.ConfigClient;
    import com.alibaba.nacos.config.client.ConfigClientFactory;
    import com.alibaba.nacos.config.server.config.annotation.ConfigInjected;
    import com.alibaba.nacos.config.server.config.annotation.RefreshScope;
    @RefreshScope
    public class NacosClientHolder {
    @NacosInjected
    private NamingService namingService;
    @NacosInjected
    private ConfigClient configClient;
    private static NacosClientHolder instance;
    private NacosClientHolder() {
    // 初始化 Nacos 客户端
    NamingClient namingClient = new DefaultNamingClient("127.0.0.1:8848");
    namingClient.setNamespaceId("public");
    namingClient.setTimeout(3000);
    namingService = namingClient;
    // 初始化 ConfigClient
    ConfigClientFactory configClientFactory = new ConfigClientFactory();
    configClientFactory.setConfigServerAddr("127.0.0.1:8848");
    configClientFactory.setTimeout(3000);
    configClient = configClientFactory.getConfigClient();
    }
    public static NacosClientHolder getInstance() {
    if (instance == null) {
    synchronized (NacosClientHolder.class) {
    if (instance == null) {
    instance = new NacosClientHolder();
    }
    }
    }
    return instance;
    }
    public NamingService getNamingService() {
    return namingService;
    }
    public ConfigClient getConfigClient() {
    return configClient;
    }
    }
    CopyCopy

    1. 通过 NacosClientHolder 类的 getInstance() 方法获取 Nacos 客户端实例,然后调用 getNamingService() 方法获取 NacosNamingService。

    NacosClientHolder nacosClientHolder = NacosClientHolder.getInstance();
    NamingService namingService = nacosClientHolder.getNamingService();

    2023-11-25 22:21:17
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载