Spring Cloud之Swagger集群搭建详解编程语言

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

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

 

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

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

 

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

 

服务配置

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

        <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:

Spring Cloud之Swagger集群搭建详解编程语言

 

 

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

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配置:

###注册 中心 
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   ##别名 

  

Spring Cloud之Swagger集群搭建详解编程语言

 

 与yml的对应!

 

启动 eureka  zuul member 然后访问

Spring Cloud之Swagger集群搭建详解编程语言

 

 Spring Cloud之Swagger集群搭建详解编程语言

 

 获取接口文档

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16135.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论