Spring Cloud Gateway入门
2019-05-24 本文已影响10人
hillside6
简介
Spring Cloud Gateway是Spring Cloud大家族的一个新进成员,在Spring Cloud 2.0之后用于取代非官方的Zuul。Getaway基于Spring 5.0与Spring WebFlux开发,采用Reactor响应式设计。
为什么需要网关
微服务架构的系统由各个相互独立的程序组成,对于服务之间的调用可以通过Consul等注册中心提供的服务注册与发现实现。但是对外暴露给客户端的接口不能要求客户端通过Consul等注册中心发现服务。网关的常见作用为隐藏后端服务、路由转发、限流(黑名单)控制、权限校验、也可以作为链路跟踪的起点。
原理

这是官方文档中提供的图,客户端发起请求到达Gateway,根据HandlerMapping到路由处理
术语
路由(Route):路由为一组断言与一组过滤器的集合,他是网关的一个基本组件。
断言(Predicate):匹配路由的判断条件,例如Path=/demo,匹配后应用路由。
过滤器(Filter):过滤器可以对请求和返回进行修改,比如增加头信息等。
地址(Uri):匹配路由后转发的地址。
官方提供了许多默认的断言与过滤器,基本能覆盖常用到的操作,更多详细的内容参考官方文档。
使用
快速搭建Spring系列的应用可以使用官方的工具生成项目代码:https://start.spring.io/
idea中也集成了该方式的使用

基于代码方式的路由配置:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("baidu_route", r -> r.path("/baidu")
.filters(f -> f.addResponseHeader("hello", "Gateway"))
.uri("http://baidu.com")
.order(1))
.build();
}
基于配置文件的路由配置
spring:
cloud:
gateway:
routes:
- id: qq_route
uri: http://qq.com
order: 2
predicates:
- Path=/qq
filters:
- AddResponseHeader=hello, Gateway
测试
请求http://127.0.0.1/baidu跳转到baidu.com
使用命令请求得到增加的返回头
