Gateway简介
SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
SpringCloud Gateway 特征
SpringCloud官方,对SpringCloud Gateway 特征介绍如下:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 断路器
(3)集成 Spring Cloud DiscoveryClient
(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
(5)具备一些网关的高级功能:动态路由、限流、路径重写
从以上的特征来说,和Zuul的特征差别不大。SpringCloud Gateway和Zuul主要的区别,还是在底层的通信框架上。Spring Cloud Gateway 底层使用了高性能的通信框架Netty。
来一个Gateway的简单示例
创建Gateway网关服务zx-gateway-runner
引入主要依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
bootstrap.yml主要配置信息
spring:
application:
name: zx-gateway-runner
version: 1.0.0
description: gateway网关服务
application.yml配置信息
server:
port: 8013
logging:
config: classpath:logback.xml
eureka:
client:
service-url:
defaultZone: http://zxdemo:zxdemopwd@127.0.0.1:8002/eureka/
instance:
prefer-ip-address: true
server:
eviction-interval-timer-in-ms: 1000
spring:
cloud:
gateway:
discovery:
locator:
enabled: false
lowerCaseServiceId: true
routes:
- id: zx_path_route
uri: lb://zx-feign-service
predicates:
- Path=/api/v1/test/**
filters:
- StripPrefix=3
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "*"
allowedMethods: "*"
spring.cloud.gateway.discovery.locator.enabled为true,表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。
spring.cloud.gateway.discovery.locator.lowerCaseServiceId是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)。
routes的配置说明
id:自定义的路由 ID,保持唯一就行
uri:目标服务地址
predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
filters:过滤条件
示例中配置的过滤器StripPrefix,作用是去掉请求路径的最前面n个部分截取掉。StripPrefix=3就代表截取路径的个数为3,比如前端过来请求/api/v1/test/api/demo/getData,匹配成功后,路由到后端的请求路径就会变成http://localhost:8004/api/demo/getData
globalcors的配置说明
当前配置是,请求通过经过gateWay网关时,需要在网关统一配置跨域请求,需求所有请求通过。
启动类
@SpringCloudApplication
public class GatewayRunnerApiApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayRunnerApiApplication.class, args);
}
}
启动注册中心和一个服务
基于前几课的打下的基础,这里我们直接启动之前的注册中心(不清楚注册中心eureka搭建的请点击这里),注册中心启动好之后,然后启动zx-feign-service服务(服务的搭建可参考SpringCloud之Ribbon的组件使用),都启动好之后,如图:
启动刚创建的Gateway网关服务zx-gateway-runner,启动好之后,会注册到eureka,如图:
验证一把,如图:
通过上面的示例演示,可以看出访问网关和对应的接口,实际根据配置的转发规则把请求转发到对应的服务了。
本文项目源码地址:
https://github.com/cdzxkj/zx_springcloud_demo
转载请注明来自:
https://blog.csdn.net/javanian