nacos多个实例,如果让多个实例同时更新缓存 实现方案
整体思路
服务新增一个刷新缓存的接口
获取所有的nacos上注册的服务实例
然后调用每个实例的刷新缓存接口
具体实现
1.启动类新增bean
@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();}2.新增刷新缓存接口
@ApiOperation("刷新缓存")@GetMapping("/refreshDictCache")public DataResponse<Boolean> refreshDictCache() {xxx.cache();return DataResponse.succeed(Boolean.TRUE);}3.新增方法获取所有服务实例并调用2新增的接口
public String triggerRefreshCache() {// 1. 从Nacos获取dict-service的所有实例List<ServiceInstance> instances = discoveryClient.getInstances(NACOS_INSTANCE_ID);if (instances.isEmpty()) {return "未找到"+HRYG_NACOS_INSTANCE_ID+"的实例";}// 2. 遍历所有实例,逐个调用接口for (ServiceInstance instance : instances) {String ip = instance.getHost();int port = instance.getPort();String url = String.format("http://%s:%d"+REFRESH_DICT_CACHE_PATH, ip, port);try {// 调用实例的接口String result = restTemplate.getForObject(url, String.class);log.info("调用实例{}:{} 成功,结果:{}", ip, port, result);} catch (Exception e) {log.error("调用实例 {}:{} 失败:{}", ip, port, e.getMessage());}}return "已触发所有实例执行接口";}