本文介绍了Swagger Gateway MicroService聚合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用SpringBoot开发一个微服务应用程序。 Gateway Microervice面向公众,它将请求重定向到特定的微服务(运行在不同的主机上)。

I am developing a microservice application using SpringBoot. There is Gateway Microservice which is public facing, it redirects requests to particular microservice (which are running on different hosts).

现在,我有多个微服务,每个微服务都有使用Swagger公开他们的API。我们希望为公共客户聚合所有这些API Swagger文档。

Now, I've multiple microservices, each microservice has exposed their APIs using Swagger. We would like to aggregate all these API Swagger docs for public clients.

我们合并的临时解决方案是,只为Gateway Service中的每个微服务复制了Swagger Annotated类。什么是 正确的方式 呢?

Temporary solution we've incorporated is, just copied the Swagger Annotated classes for each microservice in Gateway Service. What is the right way to do it?

推荐答案

我用过Zuul,这解决了我的问题
这就是我的应用程序的部署方式

I used Zuul and that solved my problemThis is how my app would be deployed

我添加了这个在我的 pom.xml

<dependencies>
        ....
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
</dependencies>

我的主要班级看起来像这样

My main class looks like this

 @EnableZuulProxy
 @SpringBootApplication
 @EnableSwagger2
 public class Application {
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
     }

    @Bean
    UiConfiguration uiConfig() {
        return new UiConfiguration("validatorUrl", "list", "alpha", "schema",
            UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L);
    }
 }

我为swagger文档创建了聚合器

I created the aggregator for swagger document

@Component
@Primary
@EnableAutoConfiguration
public class SwaggerAggregatorController implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources= new ArrayList<>();
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName("cust-service");
        swaggerResource.setLocation("/cust/v2/api-docs");
        swaggerResource.setSwaggerVersion("2.0");

        resources.add(swaggerResource);
        return resources;
    }
}

我可以在此字段中添加更多微服务。 (可以改进从配置文件中读取)

I can add more microservices in this field. (Can be improved to be read from config file)

我的 application.properties 如下所示

...
server.port=8001

zuul.routes.cust.path=/cust/**
zuul.routes.cust.url=http://1.1.1.2:8002/cust-service/
...

这篇关于Swagger Gateway MicroService聚合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 09:06