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

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

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

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 "服务器繁忙,请稍后重试";
} }

order 因为之前由feign 客户端调用,所以在父类里面也要加@Api()注解:

package com.aiyuesheng.api.impl;

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.api.IOrderService;
import com.aiyuesheng.entity.Order; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; @RestController
@Api("订单接口文档")
public class OrderServiceImpl implements IOrderService { @ApiOperation("方法描述用例")
@PostMapping("/swaggerIndex")
public String swaggerOrder() {
return "swaggerIndex";
} @ApiOperation("参数描述用例")
@ApiImplicitParam(name = "name", value = "用户名", required = true, dataTypeClass = String.class)
@GetMapping("/getAge")
public String swaggerOrderrParam(String userName) {
return "chris";
} @RequestMapping("/")
public String index() {
return "app-aiyuesheng-order";
} @RequestMapping("/getOrder")
public Order getOrder(String orderId) {
Order order = new Order();
order.setOrderId(orderId);
order.setOrderName("订单名称");
return order;
} }

父类:

@Api("订单接口文档")
public interface IOrderService { @RequestMapping("/getOrder")
public Order getOrder(String orderId);
}

第四步:

启动类加上注解@EnableSwagger2Doc

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableSwagger2Doc //生成swagger文档
public class OrderApp {
public static void main(String[] args) {
SpringApplication.run(OrderApp.class, args);
}
}

第五步:配置zuul:

package com.aiyuesheng;

import java.util.ArrayList;
import java.util.List; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.context.annotation.Bean;
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; @EnableZuulProxy
@SpringBootApplication
@EnableDiscoveryClient
@EnableSwagger2Doc
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
// @Bean
// public TokenFilter accessFilter() {
// return new TokenFilter();
// } @RefreshScope
@ConfigurationProperties("zuul")
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
} @Component
@Primary
class DocumentationConfig implements SwaggerResourcesProvider {
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
resources.add(swaggerResource("app-aiyuesheng-member", "/api-member/v2/api-docs", "2.0"));
resources.add(swaggerResource("app-aiyuesheng-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;
}
}

zuul 的配置文件,回顾下,

spring:
application:
####注册中心应用名称
name: service-zuul
cloud:
config:
####读取后缀
profile: dev
####读取config-server注册地址
discovery:
service-id: config-server
enabled: true
#####eureka服务注册地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
server:
port: 80
#配置手动实时刷新
#managementendpoints.web.exposure.include=*
management:
endpoints:
web:
exposure:
include: "*"

配置中心上的路由转发,回顾下:

### 配置网关反向代理
zuul:
routes:
api-member:
### 以 /api-member/访问转发到会员服务
path: /api-member/**
serviceId: app-aiyuesheng-member
api-order:
### 以 /api-order/访问转发到订单服务
path: /api-order/**
serviceId: app-aiyuesheng-order

配置成功:访问http://127.0.0.1/swagger-ui.html#/

因为网关是80,然后再转发到对应的服务地址的

最新文章

  1. 探索 Linux 系统的启动过程
  2. gridview安卓实现单行多列横向滚动
  3. 【转】Linux 文件夹文件创建与删除
  4. 采用DOM进行表格的修改操作
  5. mteclipse中运行的分页,搜索,列表批量删除的界面,它的源代码
  6. Nikola的5项依赖注入法则
  7. yum命令不能使用的相关错误
  8. php学习笔记2--安装apache遇到的问题
  9. M - 约会安排 - hdu 4553
  10. 转:Grunt:任务自动管理工具
  11. [osg]osg显示中文信息
  12. JS绑定种类汇总
  13. thinkphp5.0 微信公众号接入支付宝支付
  14. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
  15. Sequentially-consistent ordering
  16. VBA删除 语法
  17. mysql和连接相关的timeout
  18. erlang 中文社区 下载
  19. 在lampp的proftpd下新增FTP用户的方法与配置
  20. spoj 694 705 不相同的子串的个数

热门文章

  1. win10下LoadRunner12 下载安装图文教程
  2. 对象深拷贝deepCopy
  3. Fedora CoreOS 非LInux专业安装文章第一手
  4. 前端每日实战:10# 视频演示如何用纯 CSS 创作一个同心圆弧旋转 loader 特效
  5. pycharm专业版激活破解(亲测有效)
  6. #AcWing系列课程Level-2笔记——5.高精度“+”算法
  7. Keil MDK版兼容51系列单片机开发环境安装
  8. JS的3种核心设计模式
  9. 11. python读写文件的多种方式
  10. Web_XML