首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >NacosServiceRegistry : No service to register for nacos client

NacosServiceRegistry : No service to register for nacos client

作者头像
johnhuster的分享
发布2022-03-28 20:22:14
发布2022-03-28 20:22:14
1.9K0
举报
文章被收录于专栏:johnhusterjohnhuster

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

代码语言:javascript
复制
    <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页面也看不到对应的注册实例,调试代码发现错误出错:

代码语言:javascript
复制
    /**
    **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方法

代码语言:javascript
复制
public String getServiceId() {
   //查询的nacosDiscoveryProperties的service属性
   return nacosDiscoveryProperties.getService();
}

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

代码语言:javascript
复制
	@Value("${spring.cloud.nacos.discovery.service:${spring.application.name:}}")
	private String service;

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

代码语言:javascript
复制
server:
  port: 9000

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

出问题时的配置如下:

代码语言:javascript
复制
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层级出现了问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档