• Spring Cloud之Swagger集群搭建


    在微服务中,Swagger是每个服务 比如会员服务,订单服务,支付服务 进行继承、

    如何将整个微服务中的Swagger进行合成,同一台服务器上。

    使用Zuul+Swagger实现管理整个微服务API文档

    使用Nginx+Swagger以不同的项目区分跳转到不同的接口文档

    Spring Boot支持对Swagger管理,只需要Zuul网关添加对应服务Swagger文档即可

    服务配置

    1、会员服务和订单服务都引入对swagger的maven支持

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>

                        

    等于:(Spring Boot已经整合好了)

    <dependency>
    <groupId>com.spring4all</groupId>
    <artifactId>swagger-spring-boot-starter</artifactId>
    <version>1.7.0.RELEASE</version>
    </dependency>

      

    两者选择其一

    然后启动类需要:

    @EnableSwagger2Doc

    接着,controller中需要:

    类上注解

       @Api("订单接口")

    接口方法上

     @ApiOperation("订单服务接口")
     @PostMapping("/getOrder")

    yml加入扫包范围:

    swagger: 
         base-package: com.toov5.api

    (每个服务都一样)

    如Member:

    复制代码
    package com.toov5.api.service.impl;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.toov5.api.entity.UserEntity;
    import com.toov5.api.service.IMemberService;
    import com.toov5.base.BaseApiService;
    import com.toov5.base.ResponseBase;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiOperation;
    
      
    @RestController
    @Api("会员服务接口")
    public class MemberServiceImpl extends BaseApiService implements IMemberService {
        @Value("${server.port}")
        private String serverPort; 
        
         @RequestMapping("/getMember")  
        public UserEntity getMember(@RequestParam("name") String name) {
            UserEntity userEntity = new UserEntity();
            userEntity.setName(name);
            userEntity.setAge(10);
            return userEntity;
        }
         
         @RequestMapping("/getUserInfo") 
         public ResponseBase getUserInfo() {
            try {
                Thread.sleep(1500);
            } catch (Exception e) {
                
            }
            return setResultSuccess("getUserInfo调用成功....");
        }
         
          
         @RequestMapping("/") 
         public String Index() {
            return "我是member"+serverPort;
        } 
         
            @ApiOperation(value = "获取会员信息接口") // 具体描述
            @ApiImplicitParam(name = "userName", value = "用户信息参数", required = true, dataType = "String") // 传入的参数 ,描述 , 必须传递true                                                                                                    // , 类型String
            @GetMapping("/getMemberInfo")
            public String getMemberInfo(String userName) {
                System.out.println(userName);
                return "userName" + userName;
            }
     
    }
    复制代码

    启动:

    复制代码
    package com.toov5.api.service.impl;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    import com.spring4all.swagger.EnableSwagger2Doc;
    
    @SpringBootApplication (scanBasePackages={"com.toov5.*"})
    @EnableEurekaClient
    @EnableFeignClients
    @EnableSwagger2Doc //开启swagger文档)
    public class AppMember {
      public static void main(String[] args) {
        SpringApplication.run(AppMember.class, args);
    }
    }
    复制代码

    yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    server:
      port: 8005
     
    spring:
        application:
            name: app-toov5-member
    ַ
    eureka:
      client:
        service-url:
               defaultZone: http://localhost:8100/eureka
     
                
     
        register-with-eureka: true
     
        fetch-registry: true
     
    swagger:
      base-package:  com.toov5.api.service.impl

      

    网关gateway配置:

    也需要引入相同的pom

    <dependency>
    <groupId>com.spring4all</groupId>
    <artifactId>swagger-spring-boot-starter</artifactId>
    <version>1.7.0.RELEASE</version>
    </dependency>

    然后启动类:

    复制代码
    package com.toov5;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
    import org.springframework.context.annotation.Primary;
    import org.springframework.stereotype.Component;
    
    import com.spring4all.swagger.EnableSwagger2Doc;
    
    import springfox.documentation.swagger.web.SwaggerResource;
    import springfox.documentation.swagger.web.SwaggerResourcesProvider;
    
    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy  //开启网关代理
    @EnableSwagger2Doc  //开启swagger
    public class AppGateway {
       public static void main(String[] args) {
       SpringApplication.run(AppGateway.class, args);     
    }
    
           // 添加文档来源
           @Component
           @Primary
           class DocumentationConfig implements SwaggerResourcesProvider {
               public List<SwaggerResource> get() {
                   List resources = new ArrayList<Object>();
                     //app-itmayiedu-order            
                   resources.add(swaggerResource("app-toov5-member", "/api-member/v2/api-docs", "2.0")); // 第一个参数可以随便写 第二个参考yml对应
                   resources.add(swaggerResource("app-toov5-order", "/api-order/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;
               }
           }
    
       }
    复制代码

    yml配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    ###注册 中心
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8100/eureka/
    server:  ##api网关端口号
      port: 81
    ###网关名称
    spring:   ##网关服务名称
      application:
        name: service-zuul
      ###网关名称 
      cloud:
        config:
        ####读取后缀
          profile: dev
          ####读取config-server注册地址
          discovery:
            service-id: confi
         
    ### 配置网关反向代理   
    zuul:
      routes:
        api-member:  ##随便写的
         ### 以 /api-member/访问转发到会员服务   通过别名找
          path: /api-member/**
          serviceId: app-toov5-member  ##别名  如果集群的话  默认整合了ribbon 实现轮训 负载均衡
        api-order:   ##随便写的
            ### 以 /api-order/访问转发到订单服务
          path: /api-order/**
          serviceId: app-toov5-order   ##别名

      

     与yml的对应!

    启动 eureka  zuul member 然后访问

     

     获取接口文档

    转:https://www.cnblogs.com/toov5/p/9975389.html

  • 相关阅读:
    console.log眼见不一定为实
    播放器
    js变量
    js函数
    js数组
    设置默认浏览器
    this.$nextTick()用法
    进程理论+创建进程的两种方法+进程join方法+进程间数据相互隔离
    风险可视化项目记录1
    HTML笔记
  • 原文地址:https://www.cnblogs.com/smallfa/p/13376987.html
Copyright © 2020-2023  润新知