in shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/ProxySelectorServiceImpl.java [203:253]
public String create(final ProxySelectorAddDTO proxySelectorAddDTO) {
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
ProxySelectorDO proxySelectorDO = ProxySelectorDO.buildProxySelectorDO(proxySelectorAddDTO);
String proxySelectorId = proxySelectorDO.getId();
if (proxySelectorMapper.insert(proxySelectorDO) > 0) {
DiscoveryProcessor discoveryProcessor = discoveryProcessorHolder.chooseProcessor(proxySelectorAddDTO.getDiscovery().getDiscoveryType());
DiscoveryDO discoveryDO;
String discoveryId;
boolean fillDiscovery;
if (StringUtils.hasLength(proxySelectorAddDTO.getDiscovery().getId())) {
discoveryDO = discoveryMapper.selectById(proxySelectorAddDTO.getDiscovery().getId());
discoveryId = proxySelectorAddDTO.getDiscovery().getId();
fillDiscovery = Objects.nonNull(discoveryDO);
} else {
discoveryId = UUIDUtils.getInstance().generateShortUuid();
discoveryDO = buildDiscovery(proxySelectorAddDTO, currentTime, discoveryId);
fillDiscovery = discoveryMapper.insertSelective(discoveryDO) > 0;
discoveryProcessor.createDiscovery(discoveryDO);
}
if (fillDiscovery) {
// insert discovery handler
String discoveryHandlerId = UUIDUtils.getInstance().generateShortUuid();
DiscoveryHandlerDO discoveryHandlerDO = DiscoveryHandlerDO.builder()
.id(discoveryHandlerId)
.discoveryId(discoveryId)
.dateCreated(currentTime)
.dateUpdated(currentTime)
.listenerNode(proxySelectorAddDTO.getListenerNode())
.handler(Objects.isNull(proxySelectorAddDTO.getHandler()) ? "" : proxySelectorAddDTO.getHandler())
.props(proxySelectorAddDTO.getProps())
.build();
discoveryHandlerMapper.insertSelective(discoveryHandlerDO);
DiscoveryRelDO discoveryRelDO = DiscoveryRelDO.builder()
.id(UUIDUtils.getInstance().generateShortUuid())
.pluginName(proxySelectorAddDTO.getPluginName())
.discoveryHandlerId(discoveryHandlerId)
.proxySelectorId(proxySelectorId)
.selectorId("")
.dateCreated(currentTime)
.dateUpdated(currentTime)
.build();
discoveryRelMapper.insertSelective(discoveryRelDO);
DiscoveryHandlerDTO discoveryHandlerDTO = DiscoveryTransfer.INSTANCE.mapToDTO(discoveryHandlerDO);
ProxySelectorDTO proxySelectorDTO = DiscoveryTransfer.INSTANCE.mapToDTO(proxySelectorDO);
proxySelectorDTO.setId(proxySelectorId);
discoveryProcessor.createProxySelector(discoveryHandlerDTO, proxySelectorDTO);
addUpstreamList(proxySelectorAddDTO, currentTime, discoveryProcessor, discoveryHandlerId, proxySelectorDTO);
}
}
return ShenyuResultMessage.CREATE_SUCCESS;
}