in shenyu-admin/src/main/java/org/apache/shenyu/admin/discovery/AbstractDiscoveryProcessor.java [167:216]
public void fetchAll(final DiscoveryHandlerDTO discoveryHandlerDTO, final ProxySelectorDTO proxySelectorDTO) {
String discoveryId = discoveryHandlerDTO.getDiscoveryId();
if (discoveryServiceCache.containsKey(discoveryId)) {
ShenyuInstanceRegisterRepository shenyuDiscoveryService = discoveryServiceCache.get(discoveryId);
final List<InstanceEntity> instanceEntities = shenyuDiscoveryService.selectInstances(buildProxySelectorKey(discoveryHandlerDTO.getListenerNode()));
List<DiscoveryUpstreamData> discoveryUpstreamDataList = instanceEntities.stream().map(instanceEntity -> {
final DiscoveryUpstreamData discoveryUpstreamData = new DiscoveryUpstreamData();
String uri = String.format("%s:%s", instanceEntity.getHost(), instanceEntity.getPort());
discoveryUpstreamData.setUrl(uri);
discoveryUpstreamData.setWeight(instanceEntity.getWeight());
discoveryUpstreamData.setStatus(instanceEntity.getStatus());
discoveryUpstreamData.setProtocol("http://");
if (Objects.isNull(discoveryUpstreamData.getNamespaceId())) {
discoveryUpstreamData.setNamespaceId(proxySelectorDTO.getNamespaceId());
}
discoveryUpstreamData.setDiscoveryHandlerId(proxySelectorDTO.getId());
return discoveryUpstreamData;
}).collect(Collectors.toList());
Set<String> urlList = discoveryUpstreamDataList.stream().map(DiscoveryUpstreamData::getUrl).collect(Collectors.toSet());
List<DiscoveryUpstreamDO> discoveryUpstreamDOS = discoveryUpstreamMapper.selectByDiscoveryHandlerId(discoveryHandlerDTO.getId());
Set<String> dbUrlList = discoveryUpstreamDOS.stream().map(DiscoveryUpstreamDO::getUrl).collect(Collectors.toSet());
List<String> deleteIds = new ArrayList<>();
for (DiscoveryUpstreamDO discoveryUpstreamDO : discoveryUpstreamDOS) {
if (!urlList.contains(discoveryUpstreamDO.getUrl())) {
deleteIds.add(discoveryUpstreamDO.getId());
}
}
if (!deleteIds.isEmpty()) {
discoveryUpstreamMapper.deleteByIds(deleteIds);
}
for (DiscoveryUpstreamData currDiscoveryUpstreamDate : discoveryUpstreamDataList) {
if (!dbUrlList.contains(currDiscoveryUpstreamDate.getUrl())) {
DiscoveryUpstreamDO discoveryUpstreamDO = DiscoveryTransfer.INSTANCE.mapToDo(currDiscoveryUpstreamDate);
discoveryUpstreamDO.setId(UUIDUtils.getInstance().generateShortUuid());
discoveryUpstreamDO.setDiscoveryHandlerId(discoveryHandlerDTO.getId());
discoveryUpstreamDO.setDateCreated(new Timestamp(System.currentTimeMillis()));
discoveryUpstreamDO.setDateUpdated(new Timestamp(System.currentTimeMillis()));
discoveryUpstreamMapper.insert(discoveryUpstreamDO);
}
}
DiscoverySyncData discoverySyncData = new DiscoverySyncData();
discoverySyncData.setSelectorId(proxySelectorDTO.getId());
discoverySyncData.setSelectorName(proxySelectorDTO.getName());
discoverySyncData.setPluginName(proxySelectorDTO.getPluginName());
discoverySyncData.setUpstreamDataList(discoveryUpstreamDataList);
discoverySyncData.setNamespaceId(proxySelectorDTO.getNamespaceId());
DataChangedEvent dataChangedEvent = new DataChangedEvent(ConfigGroupEnum.DISCOVER_UPSTREAM, DataEventTypeEnum.UPDATE, Collections.singletonList(discoverySyncData));
eventPublisher.publishEvent(dataChangedEvent);
}
}