|  |  |  | @ -62,24 +62,24 @@ public class DocDiscovery { | 
			
		
	
		
			
				
					|  |  |  |  |         // subscribe
 | 
			
		
	
		
			
				
					|  |  |  |  |         String thisServiceId = nacosDiscoveryProperties.getService(); | 
			
		
	
		
			
				
					|  |  |  |  |         for (ServiceInfo serviceInfo : subscribes) { | 
			
		
	
		
			
				
					|  |  |  |  |             String serviceName = serviceInfo.getName(); | 
			
		
	
		
			
				
					|  |  |  |  |             String serviceId = serviceInfo.getName(); | 
			
		
	
		
			
				
					|  |  |  |  |             // 如果是本机服务,跳过
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (Objects.equals(thisServiceId, serviceName) || "api-gateway".equalsIgnoreCase(serviceName)) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (Objects.equals(thisServiceId, serviceId) || "api-gateway".equalsIgnoreCase(serviceId)) { | 
			
		
	
		
			
				
					|  |  |  |  |                 continue; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             // nacos会不停的触发事件,这里做了一层拦截
 | 
			
		
	
		
			
				
					|  |  |  |  |             // 同一个serviceId5秒内允许访问一次
 | 
			
		
	
		
			
				
					|  |  |  |  |             Long lastUpdateTime = updateTimeMap.getOrDefault(serviceName, 0L); | 
			
		
	
		
			
				
					|  |  |  |  |             Long lastUpdateTime = updateTimeMap.getOrDefault(serviceId, 0L); | 
			
		
	
		
			
				
					|  |  |  |  |             long now = System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  |             if (now - lastUpdateTime < FIVE_SECONDS) { | 
			
		
	
		
			
				
					|  |  |  |  |                 continue; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             updateTimeMap.put(serviceName, now); | 
			
		
	
		
			
				
					|  |  |  |  |             updateTimeMap.put(serviceId, now); | 
			
		
	
		
			
				
					|  |  |  |  |             try { | 
			
		
	
		
			
				
					|  |  |  |  |                 List<Instance> allInstances = namingService.getAllInstances(serviceName); | 
			
		
	
		
			
				
					|  |  |  |  |                 List<Instance> allInstances = namingService.getAllInstances(serviceId); | 
			
		
	
		
			
				
					|  |  |  |  |                 if (CollectionUtils.isEmpty(allInstances)) { | 
			
		
	
		
			
				
					|  |  |  |  |                     // 如果没有服务列表,则删除所有路由信息
 | 
			
		
	
		
			
				
					|  |  |  |  |                     docManager.remove(serviceName); | 
			
		
	
		
			
				
					|  |  |  |  |                     docManager.remove(serviceId); | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |  |                     for (Instance instance : allInstances) { | 
			
		
	
		
			
				
					|  |  |  |  |                         String url = getRouteRequestUrl(instance); | 
			
		
	
	
		
			
				
					|  |  |  | @ -87,16 +87,16 @@ public class DocDiscovery { | 
			
		
	
		
			
				
					|  |  |  |  |                         if (responseEntity.getStatusCode() == HttpStatus.OK) { | 
			
		
	
		
			
				
					|  |  |  |  |                             String body = responseEntity.getBody(); | 
			
		
	
		
			
				
					|  |  |  |  |                             docManager.addDocInfo( | 
			
		
	
		
			
				
					|  |  |  |  |                                     serviceName | 
			
		
	
		
			
				
					|  |  |  |  |                                     serviceId | 
			
		
	
		
			
				
					|  |  |  |  |                                     , body | 
			
		
	
		
			
				
					|  |  |  |  |                                     , callback -> log.info("加载服务文档,serviceId={}, 机器={}" | 
			
		
	
		
			
				
					|  |  |  |  |                                             , serviceName, instance.getIp() + ":" + instance.getPort()) | 
			
		
	
		
			
				
					|  |  |  |  |                                             , serviceId, instance.getIp() + ":" + instance.getPort()) | 
			
		
	
		
			
				
					|  |  |  |  |                             ); | 
			
		
	
		
			
				
					|  |  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } catch (NacosException e) { | 
			
		
	
		
			
				
					|  |  |  |  |                 log.error("选择服务实例失败,serviceName:{}", serviceName, e); | 
			
		
	
		
			
				
					|  |  |  |  |                 log.error("选择服务实例失败,serviceId:{}", serviceId, e); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |