在我尝试为我的Zuul Edge服务中的所有微服务创建一个整合的Swagger UI。 Edge Service在Kubernetes中运行,并使用Spring Cloud Kubernetes进行Service Discovery。
查询执行器/端点时,我看到了所有的微服务。
但是,当使用ZuulProperties - > getRoutes()。values()时,我只得到一个空数组。
我是否需要在application.properties中对路由进行硬编码,或者是否有办法利用服务发现来动态获取所有路由?
application.properties:
spring.application.name=gateway-service
eureka.client.enabled=false
zuul.sensitiveHeaders=
zuul.ignoreSecurityHeaders=false
management.endpoints.web.exposure.include=*
server.port=8080
swagger config.Java:
@Autowired
ZuulProperties properties;
@Primary
@Bean
public SwaggerResourcesProvider swaggerResourcesProvider() {
return () -> {
List<SwaggerResource> resources = new ArrayList<>();
System.out.println("Zuul routes " + properties.getRoutes().values().toString());
properties.getRoutes().values().stream().forEach(route ->
resources.add(createResource(route.getId(), "2.0")));
return resources;
};
}
private SwaggerResource createResource(String location, String version) {
System.out.println("Location: " + location);
System.out.println("Version: " + version);
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(location);
swaggerResource.setLocation("/" + location + "/v2/api-docs");
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
ZuulProperties将从application.properties获取您的路由,您应该具有以下内容:
zuul.routes.<some_service>.path = /<your_path>/**
zuul.routes.<some_service>.serviceId = <your_service_id>
...
但这不会回答你的问题,你需要的是微服务swagger ui文档,检查this