怎么才能使消费者缓存的服务提供者列表清除掉 现在 注册中心关掉了 还是能访问?
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击链接欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要使消费者缓存的服务提供者列表清除,确保在注册中心关闭后无法访问之前已缓存的提供者信息,您可以采取以下措施:
配置推空保护:在服务消费者(Consumer)侧启用推空保护功能。这样当Consumer从注册中心订阅到空列表时(例如注册中心不可用或服务列表被清空),推空保护将生效,避免使用过时的提供者列表。配置方式如下:
spring.cloud.nacos.discovery.namingPushEmptyProtection=true
namingPushEmptyProtection=true
注意:此配置要求nacos-java-client
版本为1.4.1及以上。
持久化缓存目录:如果您的应用部署在容器环境中,需要确保推空保护生效后的缓存目录能够持久化,避免容器重启导致缓存丢失。缓存目录通常位于/home/admin/nacos/naming/${namespaceId}
,您应将其挂载为Volume以保持数据持久性。
检查框架特定问题:根据使用的框架,可能存在特定的缓存或路由规则导致旧地址仍在使用。例如,Feign、LoadBalancer等可能有自身的缓存逻辑,Dubbo 2.7.7至2.7.16版本存在多订阅问题。对于这些问题,升级框架版本或调整相应设置是必要的。Dubbo用户建议升级至2.7.17以上版本或开启推空保护来规避问题。
通过上述步骤,可以有效解决消费者端因缓存而导致的对已关闭注册中心中服务提供者的访问问题,确保服务调用的准确性和系统的一致性。
参考资料: MSE注册配置中心高可用最佳实践, 应用服务调用了非预期的服务提供者