我是靠谱客的博主 动听寒风,最近开发中收集的这篇文章主要介绍NacosServiceRegistry : No service to register for nacos client,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用最新的1.2.x版本的nacos-server做注册中心时,按照nacos官网上说明加入了下面的依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

但是应用启动时打印除了“NacosServiceRegistry    : No service to register for nacos client”的提示信息,在nacos-server页面也看不到对应的注册实例,调试代码发现错误出错:

    /**
    **NacosServiceRegistry类
    **/
	public void register(Registration registration) {

		if (StringUtils.isEmpty(registration.getServiceId())) {
			log.warn("No service to register for nacos client...");
			return;
		}

		String serviceId = registration.getServiceId();

		Instance instance = getNacosInstanceFromRegistration(registration);

		try {
			namingService.registerInstance(serviceId, instance);
			log.info("nacos registry, {} {}:{} register finished", serviceId,
					instance.getIp(), instance.getPort());
		}
		catch (Exception e) {
			log.error("nacos registry, {} register failed...{},", serviceId,
					registration.toString(), e);
		}
	}

通过上面的代码知道有个serviceId的属性没有配置,具体配置在NacosRegistration(Registration 接口的实现类)配置类里面,看下NacosRegistration类的getServiceId方法

public String getServiceId() {
   //查询的nacosDiscoveryProperties的service属性
   return nacosDiscoveryProperties.getService();
}

最终配置来自于NacosDiscoveryProperties这个类,跟nacos注册相关的一些属性在该配置类里面:

	@Value("${spring.cloud.nacos.discovery.service:${spring.application.name:}}")
	private String service;

通过上面的代码我们可以知道,service默认取得是spring.application.name配置的值,前提是spring.application.name这个属性已经配置了,笔者的应用之所以没有注册到nacos-server原因在于在配置spring.application.name缩进出了问题,调整后就可以了,下面给出示例配置:

server:
  port: 9000

management:
  endpoints:
    web:
      exposure:
        include: '*'
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: public

出问题时的配置如下:

server:
  port: 9000

management:
  endpoints:
    web:
      exposure:
        include: '*'
spring:
  application:
  name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: public

name与application层级出现了问题。

最后

以上就是动听寒风为你收集整理的NacosServiceRegistry : No service to register for nacos client的全部内容,希望文章能够帮你解决NacosServiceRegistry : No service to register for nacos client所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部