Gateway网关是是所有微服务的统一入口, 网关的核心功能特性主要体现在请求路由,权限控制,限流三部分
ence/html/#the-addrequestheader-gatewayfilter-factory): 区分用户来源,给请求添加一些标识,一般通过添加新的请求头,全局染色
网关的分类及其技术选型
全局网关(接入层网关): 主要实现负载均衡、请求日志等,不和业务逻辑代码绑定
业务网关(微服务网关): 将请求转发到不同的业务/项目/接口/服务,包含一些业务逻辑代码
在SpringCloud中网关的实现主要包括四种,它旨在为微服务框架提供一种简单有效的统一的API路由管理方式

第一步: 新建一个SpringBoot工程如gateway模块, 引入网关依赖和nacos服务发现依赖
org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
第二步: 在gateway模块中编写启动类
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
编程式(更灵活): 在项目启动类上添加对应网关代码, 实现https://yupi.icu/yupi到http://yupi.icu/
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("toyupi", r -> r.path("/yupi")
.uri("http://yupi.icu/"))
.route("路由Id", r -> r.path("路由规则")
.uri("路由的目标地址"))
.route.......
.build();
}
配置式(更直观): 编写基础配置和路由规则
# 快捷配置方式
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org # 路由到固定地址
uri: lb://Nacos中注册的服务名称 # 路由到某个服务
predicates:
- Cookie=mycookie,mycookievalue # cookie里必须有mycookie且值是mycookievalue
# 完全展开配置方式
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue
第一步: 客户端向网关发起请求,如果请求与Handler Mapping定义的路由匹配则将请求转发给Web Handler
第二步: 通过定义的过滤器链过滤用户请求,过滤器可以在代理请求之前或者之后执行
