指尖下的技术 2025-07-04 14:37 采纳率: 20%
浏览 47
已结题

nacos 调用服务 出现 Cannot invoke "Object.hashCode()" because "key" is null

我使用的SpringCloudAlibaba版本是2022.0.0.0-RC2,SpringBoot版本是3.0.2,nacos的版本是2.4.3。两个服务启动可以成功注册到nacos。如果使用ip+端口的方式,order服务是可以成功调用shop服务的,当通过nacos调用,就会报错。
RestTemplate配置类


@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {

        return new RestTemplate();
    }
}

测试代码

  @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/add")
    public String add() {
        String url = "http://shop-server/shop/reduct";
        return restTemplate.getForObject(url, String.class);
    }

shop-server的配置文件

server:
  port: 8082
spring:
  application:
    name: shop-server
  cloud:
    nacos:
      discovery:
        server-addr: localhost:18848

order-server的配置文件


spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:18848
  application:
    name: order-server


server:
  port: 8081

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-07-04 14:37
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你在使用 Nacos 调用服务时,出现了 Cannot invoke "Object.hashCode()" because "key" is null 的错误。这可能是由于 Nacos 服务注册时,key 为空导致的。

    在 Spring Cloud Alibaba 2022.0.0.0-RC2 中,Nacos 服务注册时,key 是由 spring.cloud.nacos.discovery.server-addrspring.cloud.nacos.discovery.group 两个配置项组成的。

    请检查你的配置文件,确保这两个配置项都已经配置了正确的值。如果这两个配置项都已经配置了正确的值,但是仍然出现这个错误,可以尝试在 Nacos 服务注册时,手动设置 key。

    例如,在你的配置文件中添加以下配置:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            group: my-group
            key: my-service-key
    

    然后,在你的服务中,使用 @NacosService 注解,指定服务的 key:

    @NacosService(value = "my-service", key = "my-service-key")
    public class MyService {
        // ...
    }
    

    如果你已经在配置文件中设置了 key,但是仍然出现这个错误,可以尝试使用 Nacos 的 debug 模式,来查看服务注册的日志信息。

    例如,在你的配置文件中添加以下配置:

    spring:
      cloud:
        nacos:
          discovery:
            debug: true
    

    然后,在你的服务中,使用 @NacosService 注解,指定服务的 key:

    @NacosService(value = "my-service", key = "my-service-key")
    public class MyService {
        // ...
    }
    

    这样,你可以在日志中看到服务注册的详细信息,来帮助你 debug 问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月11日
  • 创建了问题 7月4日