1、搭建Nginx+Zuul实现高性能网关
Zginx + Zuul (多个网关),实现一主一备或者轮询。在微服务中,所有服务请求都会统一请求到Zuul网关上。
原理:客户端发送请求,统一到nginx上,再使用nginx实现反响代理和负载均衡,采用轮询算法转发到网关上,最后由网关再次进行本地负载均衡把请求分发到具体的服务上去。如下图:
2、基于Nginx实现Zuul集群环境
(1)Nginx配置服务器集群实现负载均衡这里就不说了(用upstream声明Zuul网关服务器组),默认是轮询策略。
(2)为什么不用nginx实现网关呢?(nginx采用的是c语言,lua写脚本)
因为微服务网关是针对与整个微服务实现统一请求拦截,网关基本上都采用自己熟悉的语言开发,目的是方便易学。
3、使用Swagger自动生成API文档
为了前后端能够更好的集成与对接,同时为了项目的方便交付,每个项目都需要提供相应的api文档。
Swagger优点:
(1)功能丰富:支持多种注解,自动生成接口文档界面,支持在界面测试api接口功能。
(2)及时更新:开发过程中花一点写注释的时间,就可以及时的更新api文档。
(3)整合简单:通过添加pom依赖和简单配置,内嵌于应用中就可同时发布api接口文档界面,不需要部署独立服务。
4、Zuul整合Swagger管理整个微服务API文档
(1)SpringBoot整合Swagger
pom.xml引入依赖:
<!-- springboot整合web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
properties或yml配置服务端口及名称:
##服务端口
server.port=6086
##服务名称
spring.application.name=springboot-swagger
建立swagger配置类:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
public Docket createRestApi(){
//生成api扫描包
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.gonghua.controller")).paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("XXXX管理系统")
.description("xxxx系统|xxxx业务")
.termsOfServiceUrl("链接地址")
.version("1.0").build();
}
}
建立controller并加入注释:加入@RequestMapping如下效果。所以根据需要添加指定的@GetMapping和@PostMapping。
如何传递参数呢?代码如下getmember方法的代码:
@Api("swagger服务层")
@RestController
public class SwaggerController {
@ApiOperation("swagger测试接口")
@GetMapping("/index")
public String index(){
return "welcome to my swagger";
}
//如何传递参数
@ApiOperation("获取member接口")
@ApiImplicitParam(name="username",value="用户请求参数",required=true,dataType="String")
@PostMapping("/getMember")
public String getMember(String username){
return "getmember";
}
}
(2)Zuul网关集群集成Swagger
(将整个微服务中的Swagger进行合成到统一服务器上,使用Zuul + Swagger实现管理整个微服务API文档)
SpringBoot支持对Swagger管理,只需要zuul网关添加对应服务Swagger文档即可。
操作步骤:
1、服务提供者和服务消费者添加pom依赖:
<!-- Swagger-spring-boot springboot对swagger的支持-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>
yml或properties配置扫描包范围:
swagger.base-package=com.gonghua.controller
启动类添加@EnableSwagger2Doc注解,表示生成swagger文档;
对应的controller添加@Api注解,方法上添加@ApiOperation和@PostMapping注解
2、网关服务里需要进行的操作:
2.1、添加同上一样的springboot对swagger支持的依赖jar包。
2.2、启动类里添加如下代码:
/**
* 添加文档来源
*/
@Component
@Primary
class DocumentActionConfig implements SwaggerResourcesProvider{
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resourcesList = new ArrayList<>();
resourcesList.add(swaggerResource("app-memeber","/app-member/v1/api-docs","v1.0"));
resourcesList.add(swaggerResource("app-order","/app-order/v1/api-docs","v1.0"));
return resourcesList;
}
/**
*
* @param name 访问对应swagger api文档的名称
* @param location 访问对应controller的地址
* @param version 版本
* @return
*/
private SwaggerResource swaggerResource(String name,String location,String version){
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
启动服务提供者、消费者、网关,访问网关,即可看到集成好的网关的swagger。