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
第二步: 通过定义的过滤器链过滤用户请求,过滤器可以在代理请求之前或者之后执行