springcloud+nacos 调用问题

各位老哥们,我使用springcloud+nacos遇到了一点问题
我在测试的时候发现,使用服务名称替换ip调用成功之后,再把nacos服务关闭,关闭之后依然能够通过服务名称替换ip的形式成功调用服务,请问这是什么情况,是springcloud已经将服务名称对应的ip 缓存起来了吗,或则说是某个类存放了这些数据?

引用 皆我百晓生 小程序回复内容作答:

在Spring Cloud中,服务发现和负载均衡默认使用的是Netflix Ribbon。Ribbon在启动时会从注册中心(如Nacos)获取服务实例列表,并缓存在本地。默认情况下,Ribbon缓存这些服务实例30秒钟,过期后会重新从注册中心获取最新的服务实例列表。因此,在服务关闭后,通过服务名称调用服务仍然能够成功,是因为Ribbon还在缓存中拥有服务实例的相关信息。

如果你想修改Ribbon的缓存时间,可以在配置文件中添加以下内容:

ribbon:
  eureka:
    enabled: false
  nacos:
    discovery:
      enabled: true
  ServerListRefreshInterval: 5000

这里的ServerListRefreshInterval表示Ribbon刷新服务实例列表的时间间隔,单位为毫秒。设置为0表示每次都从注册中心获取最新的服务实例列表。

同时,你也可以使用@RefreshScope注解来实现动态刷新Ribbon的配置,确保每次调用服务时都能获取到最新的服务实例列表。

除了Ribbon以外,还可以使用Spring Cloud的其他负载均衡组件,如Spring Cloud LoadBalancer(2.2.x版本后推荐使用),它的负载均衡策略是基于服务实例元数据的动态选择,不需要缓存服务实例列表。你可以在项目中添加以下依赖来使用Spring Cloud LoadBalancer:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

同时,在配置文件中将Ribbon禁用,启用Spring Cloud LoadBalancer:

ribbon:
  enabled: false
spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: true

希望可以帮助到你!