| | |
| | | package com.terra.gateway.config; |
| | | |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | import com.alibaba.nacos.client.naming.event.InstancesChangeEvent; |
| | | import com.alibaba.nacos.common.notify.Event; |
| | | import com.alibaba.nacos.common.notify.NotifyCenter; |
| | | import com.alibaba.nacos.common.notify.listener.Subscriber; |
| | | import com.terra.gateway.utils.StringUtils; |
| | | import org.springdoc.core.AbstractSwaggerUiConfigProperties; |
| | | import org.springdoc.core.SwaggerUiConfigProperties; |
| | | import org.springframework.beans.factory.InitializingBean; |
| | |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.cloud.client.discovery.DiscoveryClient; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import com.alibaba.nacos.client.naming.event.InstancesChangeEvent; |
| | | import com.alibaba.nacos.common.notify.Event; |
| | | import com.alibaba.nacos.common.notify.NotifyCenter; |
| | | import com.alibaba.nacos.common.notify.listener.Subscriber; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * SpringDoc配置类 |
| | |
| | | /** |
| | | * Swagger文档注册器 |
| | | */ |
| | | class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> |
| | | { |
| | | @Resource |
| | | class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> { |
| | | @Autowired |
| | | private SwaggerUiConfigProperties swaggerUiConfigProperties; |
| | | |
| | | @Resource |
| | | @Autowired |
| | | private DiscoveryClient discoveryClient; |
| | | |
| | | private final static String[] EXCLUDE_ROUTES = new String[] { "se-gateway", "se-auth", "se-file", "se-monitor", "se-system" }; |
| | | private final static String[] EXCLUDE_ROUTES = new String[]{"se-gateway"}; |
| | | |
| | | public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) |
| | | { |
| | | public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) { |
| | | this.swaggerUiConfigProperties = swaggerUiConfigProperties; |
| | | this.discoveryClient = discoveryClient; |
| | | } |
| | | |
| | | /** |
| | | * 事件回调方法,处理InstancesChangeEvent事件 |
| | | * |
| | | * @param event 事件对象 |
| | | */ |
| | | @Override |
| | | public void onEvent(InstancesChangeEvent event) |
| | | { |
| | | public void onEvent(InstancesChangeEvent event) { |
| | | Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrlSet = discoveryClient.getServices() |
| | | .stream() |
| | | .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream()) |
| | | //.filter(instance -> !StringUtils.equalsAnyIgnoreCase(instance.getServiceId(), EXCLUDE_ROUTES)) |
| | | .map(instance -> { |
| | | AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); |
| | | swaggerUrl.setName(instance.getServiceId()); |
| | | swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getServiceId())); |
| | | return swaggerUrl; |
| | | }) |
| | | .collect(Collectors.toSet()); |
| | | .stream() |
| | | .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream()) |
| | | .filter(instance -> !StringUtils.equalsAnyIgnoreCase(instance.getServiceId(), EXCLUDE_ROUTES)) |
| | | .map(instance -> { |
| | | AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); |
| | | swaggerUrl.setName(instance.getServiceId()); |
| | | swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getServiceId())); |
| | | return swaggerUrl; |
| | | }) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | swaggerUiConfigProperties.setUrls(swaggerUrlSet); |
| | | } |
| | | |
| | | /** |
| | | * 订阅类型方法,返回订阅的事件类型 |
| | | * |
| | | * @return 订阅的事件类型 |
| | | */ |
| | | @Override |
| | | public Class<? extends Event> subscribeType() |
| | | { |
| | | public Class<? extends Event> subscribeType() { |
| | | return InstancesChangeEvent.class; |
| | | } |
| | | } |