1,因为整个微服务会有好多服务,比如会员服务,支付服务,订单服务,每个服务都集成了swagger

     我们在访问的时候,不可能每个服务输入一个url 去访问,看起来很麻烦,所以我们需要在一个页面上集成整个微服务项目中所有的 swagger

     效果图:可以选择不同的应用,出来的是不同的swagger 接口文档

swagger2 接口文档,整个微服务接口文档

2,实现思路:

    zuul 网关 + swagger 

    客户端访问一个应用,zuul 网关转发到相应的界面,看起来是在一个服务上的效果  

3,eureka :注册中心

     springcloud-config:注册中心:路由转发用配置中心做的,没有写在本地。可以参考springcloud-config 动态网关路由

     springcloud-api-member-impl-service:在eureka 注册的服务是:app-aiyuesheng-member

     springcloud-api-order-impl-service:在eureka 注册的服务是:app-aiyuesheng-order

     springcloud-swagger2:swagger 服务

     springcloud-zuul :zuul 网关服务

4,

第一步:

member 服务 和 order ,zuul 需要添加maven 依赖:

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

第二步:   

member ,order 配置文件添加:

##swagger扫包
swagger:
  base-package: com.aiyuesheng.api.impl

第三步:

swagger 的接口类的写法还是一样:

package com.aiyuesheng.api.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.aiyuesheng.entity.Order;
import com.aiyuesheng.feign.OrderServiceFeign;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

@RestController
@Api("会员接口文档")
public class MemberServiceImpl {

    @Autowired
    private OrderServiceFeign orderServiceFeign;

    @ApiOperation("方法描述用例")
    @PostMapping("/swaggerIndex")
    public String swaggerMember() {
        return "swaggerIndex";
    }

    @ApiOperation("参数描述用例")
    @ApiImplicitParam(name = "name", value = "用户名", required = true, dataTypeClass = String.class)
    @GetMapping("/getAge")
    public String swaggerMemberParam(String userName) {
        return "chris";
    }

    @RequestMapping("/")
    public String index() {
        return "app-aiyuesheng-member";
    }

    // @HystrixCommand 默认开启服务隔离,是以线程池方式
    // @HystrixCommand 默认开启服务降级,fallbackMethod 方法名就是服务的降级名称
    // @HystrixCommand 默认开启服务熔断机制
    // @Hystrix 要禁止超时时间,默认1 秒,如果没有即使响应,会走业务逻辑,但是也会走服务降级方法,所以要禁止超时时间
    @HystrixCommand(fallbackMethod = "orderServiceFallback")
    @RequestMapping("/getOrder")
    public Order getOrder(String orderId) {
        System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());
        return orderServiceFeign.getOrder(orderId);
    }

    @RequestMapping("/getOrder2")
    public Order getOrder2(String orderId) {
        System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());
        return orderServiceFeign.getOrder(orderId);
    }

    @RequestMapping("/orderServiceFallback")
    public String orderServiceFallback() {
        return "服务器繁忙,请稍后重试";
    }

}
View Code

相关文章: