SpringCloud Gateway
SpringCloud Gateway 是Spring提供的一种网关。
工作原理图:
客户端访问SpringCloud Gateway,如果请求与网关路由匹配,则由SpringCloud Gateway发送到网关的web程序处理。
谈一谈我的理解,所谓网关就是在我们微服务集群前设置一个唯一流量入口,所有的请求都必须先通过网关,既然是唯一流量入口,那么就可以承担过滤器的角色。比如我们定义一些规则,只有符合这些规则的请求才可以通过并转发,或者充当过滤器角色做一些权限校验流量控制等工作。总之网关是非常重要的一环。它是保护我们后宫(微服务集群)的第一道保障。
SpringCloud GateWay
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
我之前用过zuul,我觉得gateway是在zuul的一些基础上做了扩充和优化。相比zuul还是有很大的提升。
我们来实际操作一下,简单入门,因为gateway涉及到的配置非常之多,这里推荐官方文档,讲解的非常清楚。
1.pom.xml 我们引入依赖
<!--网关依赖包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.bootstrap.yml 配置
gateway:
discovery:
locator:
enabled: false #gateway开启服务注册发现
lower-case-service-id: true #true 只能识别小写 false 只能识别大写
routes: #自定义路由 url: lb:+服务id 路由的服务地址
- id: host_route #路由Id
uri: http://localhost:8013 #路由地址
predicates: #谓语 可以使用正则
- Path=/toserver/**
#springcloud gateway 提供了很多灵活的谓语匹配
#域名过滤 - Host=**.pk.** # 请求域名携带pk的,则转发
#请求参数过滤 - Query=username, zzz* # 请求参数含有username,且值满足zzz开头的,则转发(对值的匹配可以省略)
#请求头过滤 - Header=request, \d+ # 如果请求头含有request,且为数字,则转发
#cookie过滤 - Cookie=name, zzzgd # 如果携带cookie,参数名为name,值为zzzgd,则转发
#路径过滤 - Path=/zzzgd/** # 请求地址携带zzzgd的,则转发
# 路由到其他服务,url需要用[lb://]+[serviceId] 比如上面的例子
#过滤前缀 - StripPrefix=1 去掉toserver
#时间过滤 - After=2019-01-01T17:42:47.789-07:00[America/Denver] # 如果请求时间大于该时间,则转发
# http动词过滤 - Method=GET 请求是get方式的才进行转发
# ip地址过滤 - RemoteAddr=192.168.1.1/24 符合地址才进行转发