• SpringCloud系列之四---Zuul网关整合Swaagger2管理API


    前言

    本篇文章主要介绍的是Zuul网关整合Swaagger2管理API。

    实现过程需要先创建eureka服务端,再创建多个微服务项目,每个微服务项目整合swagger2,形成接口文档,并且每个微服务需要注册到eureka注册中心。再创建zuul网关对所有的swagger进行管理,zuul网关也需要作为eureka客户端注册到注册中心。

    GitHub源码链接位于文章底部。

    1.eureka服务端

    首先创建eureka注册中心,因为这只是一个注册中心,所以只需要引入eureka服务端jar即可。

    1.1 pom依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
    

    1.2 配置文件

    生产环境中需要开启自我保护机制,删除eureka.server

    server:
      port: 8100
    
    spring:
      application:
        name: eureka-server
    
    #eureka基本配置信息
    eureka:
      client:
        service-url:
          #Eureka 客户端与 Eureka 服务端进行交互的地址
          defaultZone: http://127.0.0.1:${server.port}/eureka
        #是否将自己注册到Eureka服务中,本身就是注册中心所以无需注册
        register-with-eureka: false
        #是否从Eureka中检索注册信息,本身就是注册中心所以无需检索
        fetch-registry: false
      server:
        # 测试时关闭自我保护机制,保证不可用服务及时踢出
        enable-self-preservation: false
        ##剔除失效服务间隔
        eviction-interval-timer-in-ms: 2000
    
    1.3 启动类

    在方法上添加eureka服务端注解EnableEurekaServer。

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

    启动以后访问 127.0.0.1:8100 即可打开eureka注册中心可视化界面。

    2.创建用户服务和邮件服务两个项目

    创建用户服务和邮件服务两个项目,这两个服务需要作为eureka客户端,注册到eureka注册中心,两个服务都需要整合swagger2,用户服务需要使用Feign调用邮件服务。

    2.1邮件服务引入依赖

    邮件服务作为eureka客户端,以及需要整合swagger2,因此只需要引入两个依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>
    </dependencies>
    
    2.2邮件服务配置文件

    配置文件包括配置端口、应用名、eureka客户端信息、swagger配置信息,需要注意swagger配置了controller层所在的包,它会检测包中swagger相关注解。

    server:
      port: 8200
    
    spring:
      application:
        name: app-email
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8100/eureka
      server:
        # 测试时关闭自我保护机制,保证不可用服务及时踢出
        enable-self-preservation: false
        ##剔除失效服务间隔
        eviction-interval-timer-in-ms: 2000
    
    ####swagger相关配置
    swagger:
      base-package: com.lxg.controller
      title: SpringCloud2.x构建微服务项目-邮件服务接口
      description: 邮件有关的服务
      version: 1.1
      terms-of-service-url: www.lxgblog.com
      contact:
        name: 李先国
        email: 15279295097@163.com
    
    2.3 邮件服务controller层

    在邮件服务中写一个获取邮件信息的Get接口,Api(tags = "邮件微服务")是swagger的注解,它为controller命名,swagger其他注解见另一篇文章https://www.lxgblog.com/article/1576055897

    @RestController
    @Api(tags = "邮件微服务")
    public class EmailController {
        @GetMapping("/email")
        public String email() {
            return "15279295097@163.com";
        }
    }
    
    2.4 邮件服务启动类

    EnableSwagger2Doc注解开启swagger,EnableEurekaClient启动eureka客户端

    @SpringBootApplication
    @EnableSwagger2Doc
    @EnableEurekaClient
    public class EmailApp {
        public static void main(String[] args) {
            SpringApplication.run(EmailApp.class,args);
        }
    }
    
    2.5 用户服务引入依赖

    用户服务作为eureka客户端,需要整合swagger2,并且它需要通过Feign远程调用邮件服务,所以是三个依赖。

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <dependency>
                <groupId>com.spring4all</groupId>
                <artifactId>swagger-spring-boot-starter</artifactId>
                <version>1.7.0.RELEASE</version>
            </dependency>
        </dependencies>
    
    2.6 用户服务配置文件

    配置文件包括配置端口、应用名、eureka客户端信息、swagger配置信息,需要注意swagger配置了controller层所在的包,它会检测包中swagger相关注解。

    server:
      port: 8300
    
    spring:
      application:
        name: app-user
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8100/eureka
      server:
        # 测试时关闭自我保护机制,保证不可用服务及时踢出
        enable-self-preservation: false
        ##剔除失效服务间隔
        eviction-interval-timer-in-ms: 2000
    
    ####swagger相关配置
    swagger:
      base-package: com.lxg.controller
      title: SpringCloud2.x构建微服务项目-用户服务接口
      description: 用户有关的服务
      version: 1.1
      terms-of-service-url: www.lxgblog.com
      contact:
        name: 李先国
        email: 15279295097@163.com
    
    2.7 用户服务的Feign

    用户服务需要调用邮件服务,所以需要创建一个EmailFeign的interface,使用FeignClient注解,值为邮件服务的应用名,这在邮件服务的配置文件中有,然后将邮件服务中需要被调用的接口拷贝到这里(包括方法上的注解)

    @FeignClient("app-email")
    public interface EmailFeign {
        @GetMapping("/email")
        public String email();
    }
    
    2.8 用户服务的controller层

    在用户服务中写一个调用邮件服务的Get接口,Api(tags = "用户微服务")是swagger的注解,它为controller命名,swagger其他注解见另一篇文章https://www.lxgblog.com/article/1576055897 ,同时将邮件Feign注入进来,通过它调用的方法其实是调用的远程服务。

    @RestController
    @Api(tags = "用户微服务")
    public class UserController {
        @Autowired
        private EmailFeign emailFeign;
    
        @GetMapping("/user")
        public String user() {
            return "用户获取邮箱:"+emailFeign.email();
        }
    }
    
    2.9 用户服务启动类

    EnableSwagger2Doc注解开启swagger,EnableEurekaClient启动eureka客户端,EnableFeignClients启动Feign客户端。

    @SpringBootApplication
    @EnableEurekaClient
    @EnableSwagger2Doc
    @EnableFeignClients
    public class UserApp {
        public static void main(String[] args) {
            SpringApplication.run(UserApp.class, args);
        }
    }
    

    启动这两个服务后,直接调用邮件服务中的接口:

    通过调用用户服务的接口调用邮件服务:

    分别访问127.0.0.1:8200/swagger-ui.html,127.0.0.1:8300/swagger-ui.html,也可以使用swagger测试上述接口:

    3.创建Zuul网关整合两个服务的swagger

    3.1 Zuul网关引入依赖

    它需要作为eureka服务端注入到eureka注册中心,作为zuul网关,整合swagger,因此需要引入如下三个依赖:

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>com.spring4all</groupId>
                <artifactId>swagger-spring-boot-starter</artifactId>
                <version>1.7.0.RELEASE</version>
            </dependency>
        </dependencies>
    
    3.2 Zuul的配置文件

    配置文件包括了端口号、服务名称、eureka客户端配置,网关反向代理配置。zuul.routes.api-user中的api.user可以任意命名,只要不重复即可,这里只作为区分。访问网关项目+path的值+相关服务接口的URI,就相当于直接访问对应服务的接口。

    ###服务启动端口号
    server:
      port: 80
    ###服务名称(服务注册到eureka名称)
    spring:
      application:
        name: app-zuul
    ###服务注册到eureka地址
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8100/eureka
    
    
    ### 配置网关反向代理
    zuul:
      routes:
        api-user:
          path: /api-user/**
          serviceId: app-user
        api-email:
          path: /api-email/**
          serviceId: app-email
    
    
    3.3 Zuul的启动类

    在启动类上加入EnableEurekaClient注解开启eureka客户端,EnableZuulProxy注解开启网关,EnableSwagger2Doc注解开启swagger。
    在启动类中整合了不同服务中的swagger

    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy
    @EnableSwagger2Doc
    public class AppZuul {
        public static void main(String[] args) {
            SpringApplication.run(AppZuul.class, args);
        }
    
        // 添加文档来源
        @Component
        @Primary
        class DocumentationConfig implements SwaggerResourcesProvider {
            @Override
            public List<SwaggerResource> get() {
                List resources = new ArrayList<>();
                resources.add(swaggerResource("app-user", "/app-user/v2/api-docs", "2.0"));
                resources.add(swaggerResource("app-email", "/app-email/v2/api-docs", "2.0"));
                return resources;
            }
    
            private SwaggerResource swaggerResource(String name, String location, String version) {
                SwaggerResource swaggerResource = new SwaggerResource();
                swaggerResource.setName(name);
                swaggerResource.setLocation(location);
                swaggerResource.setSwaggerVersion(version);
                return swaggerResource;
            }
    
        }
    }
    

    启动网关服务后,访问127.0.0.1/swagger-ui.html

    因为配置的是80端口,因此浏览器访问会省略80端口


    通过网关访问邮件服务的接口,127.0.0.1/api-email/email和上面的127.0.0.1:8200/email是一样的

    通过网关访问用户服务的接口去调用邮件服务的接口,127.0.0.1/api-user/email和上面的127.0.0.1:8300/user是一样的

    这是由zuul配置文件中反向代理配置的。

    本文GitHub源码:https://github.com/lixianguo5097/springcloud/tree/master/springcloud-springcloud-zuul-swagger2

    CSDN:https://blog.csdn.net/qq_27682773
    简书:https://www.jianshu.com/u/e99381e6886e
    博客园:https://www.cnblogs.com/lixianguo
    个人博客:https://www.lxgblog.com

  • 相关阅读:
    C#--事件驱动在上位机中的应用【一】(搭建仿真PLC环境)
    C#--事件驱动在上位机中的应用【三】(自定义控件)
    C#--事件驱动在上位机中的应用【二】(自定义控件)
    C#--属性--propfull和prop使用场所
    C#--通过Modbus TCP与西门子1200PLC通讯
    C#--简单调用WebService
    C#-- 简单新建WebService服务
    C#--发布WebService和部署IIS到本地服务器
    P1909 买铅笔
    P1089 津津的储蓄计划
  • 原文地址:https://www.cnblogs.com/lixianguo/p/12522534.html
Copyright © 2020-2023  润新知