文章目录
- gateway能做什么
- Gateway
- Gateway+Nacos
- 引入依赖
- 配置文件
- 路由断言工厂配置
- 官方提供的路由断言工厂
- 自定义的路由断言工厂
- 过滤器工厂配置
- 常见的官方提供的过滤器
- 自定义过滤器工厂
- 全局过滤器
- 打开请求日志
- gateway统一配置跨域
- 自定义全局过滤器
- 全局过滤器和路由过滤器区别
- 其它
- Service Unavailable
- gateway整合sentinel流控降级
gateway能做什么
springcloud官方网关框架,对外暴露一个统一的API接口,客户端仅需与API网关交互,而无需直接调用后端的各个微服务,提高系统的安全性,可以实现一些和业务逻辑无关的公共逻辑,如负载均衡、限流与熔断、认证和授权、数据加密、路由转发等。
- Spring Cloud Gateway功能特征
- 动态路由:能够匹配任何请求属性:
- 支持路径重写;
- 集成Spring Cloud服务发现功能(Nacos、Eruka);
- 可集成流控降级功能(Sentinel、.Hystriⅸ);
- 可以对路由指定易于编写的Predicate(断言)和Filter(过滤器);
Gateway
- 目录
- gateway配置文件
spring:application:name: gatewaycloud:# gateway 配置gateway:# 路由配置routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: http://localhost:8081 # order服务的ip:端口predicates:- Path=/order-server/** # 断言,路径匹配,# 访问 http://localhost:80/order-server/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order-server/order/loginfilters:- StripPrefix=1 # 从请求的路径中移除第一个层级的路径前缀 移除后 http://localhost:8081/order/login- id: user-route # 路由到user服务uri: http://localhost:8082predicates:- Path=/user-server/**filters:- StripPrefix=1server:port: 80
启动项目,通过网关访问order的接口成功
routes
:路由配置
routres的属性如下
Gateway+Nacos
如果服务路径写死在yml中,维护起来很麻烦,现在通过nacos访问
- 引入nacos依赖
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 加入nacos配置
cloud:nacos:discovery:server-addr: 127.0.0.1:8848 //nacos没有配置鉴权,所以只有ip、端口
- 修改gateway配置
# gateway 配置gateway:# 路由配置routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order-server/** # 断言,路径匹配,# 访问 http://localhost:80/order-server/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order-server/order/loginfilters:- StripPrefix=1 # 从请求的路径中移除第一个层级的路径前缀 移除后 http://localhost:8081/order/login- id: user-routeuri: lb://user-servicepredicates:- Path=/user-server/**filters:- StripPrefix=1
uri原本是写死的 http://localhost:8081/order-server/order/login
,现在改成了注册到nacos的服务名,例如lb://order-server
,
然后访问http://127.0.0.1/user-server/user/login
引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.11</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com</groupId><artifactId>gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway</name><description>gateway</description><properties><java.version>17</java.version><spring-cloud.version>2023.0.3</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- nacos依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2022.0.0.0</version></dependency><!-- 网关依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>4.0.1</version></dependency><!-- 负载依赖,不加的话,通过注册中心访问uri: lb://stock-server,会报503, Service Unavailable--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>4.0.1</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配置文件
路由断言工厂配置
作用:当请求gatewayl的时候,使用断言对请求进行匹配,如果匹配成功就路由转发,如果匹配失败就返回404
类型:内置,自定义
官方提供的路由断言工厂
-
基于datetime的类型的断言工厂
此关型的断言根据时间做判断,格式是带有时区信息和区域信息的时间,主要有三个:
AfterRoutePredicateFactory::接收一个日期参数,判断请求日期是否晚于指定日期
BeforeRoutePredicateFactory:接收一个日期参数,判断请求日期是否早于指定日期
BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内
ZonedDateTime.now()可以输出这个时间格式- 断言两个条件,匹配路径
/order/**
和时间在2025-02-23T15:36:55.211971500+08:00[Asia/Shanghai]
之后的请求。routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,# 访问 http://localhost:80/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order/login- After=2025-02-23T15:36:55.211971500+08:00[Asia/Shanghai]
- 断言两个条件,匹配路径
-
基于Header的断言工厂
HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。- 判断Header中是否包含X-Request-Id,并且值是数字
routes: - id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,# 访问 http://localhost:80/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order/login- After=2025-02-23T15:36:55.211971500+08:00[Asia/Shanghai]- Header=X-Request-Id,\d+
- 判断Header中是否包含X-Request-Id,并且值是数字
-
基于Method请求方法的断言工厂
MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。- 判断请求是否GET请求
routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,# 访问 http://localhost:80/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order/login- After=2025-02-23T15:36:55.211971500+08:00[Asia/Shanghai]- Header=X-Request-Id,\d+- Method=GET
- 判断请求是否GET请求
-
基于Quey请求参数的断言工厂
QueryRoutePredicateFactory:接收两个参数,请求param和正则表达式,判断请求参数是否具有给定名称且值与正则表达式匹配.- 判断Query参数中是否有name参数,name的值不限制,
- 如果是Query=name,z|w,那么,name值必须是z或者w
routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,# 访问 http://localhost:80/order/login 匹配了order-route的断言规则# 实际转发到 http://localhost:8081/order/login- After=2025-02-23T15:36:55.211971500+08:00[Asia/Shanghai]- Header=X-Request-Id,\d+- Method=GET- Query=name
-
基于路由权重的断言工厂
WeightRoutePredicateFactory:接收一个组名,权重,然后对于同一个组内的路由按照权重转发,权重大的分配到的几率大routes-id:weight_routeluri:host1predicates:-Path=/product/**-Weight=group3,1-id:weight_route2uri:host2predicates:-Path=/product/**-Weight=group3,9
-
常用的官方提供的断言工厂
属性名称 | 作用 | 说明 | 示例配置 |
---|---|---|---|
Path | 根据请求的路径进行匹配 | 匹配请求的 URI 路径。支持简单的路径匹配和通配符匹配。 | predicates: - Path=/api/** |
Method | 根据请求的方法(GET, POST, PUT, DELETE 等)进行匹配 | 匹配请求的 HTTP 方法。 | predicates: - Method=GET |
Host | 根据请求的 Host 头部进行匹配 | 匹配请求的 Host 名称。 | predicates: - Host=*.example.com |
Header | 根据请求的特定头部进行匹配 | 匹配请求的头部信息。可以匹配单个头部,也可以使用条件进行匹配。 | predicates: - Header=X-Auth-Token, my-token |
Query | 根据请求的查询参数进行匹配 | 匹配请求 URL 中的查询参数。 | predicates: - Query=apiKey=12345 |
Cookie | 根据请求中的 Cookie 进行匹配 | 匹配请求的 Cookie。 | predicates: - Cookie=session, abc123 |
Accept | 根据请求的 Accept 头部进行匹配 | 匹配请求中的 Accept 头部(指定响应的媒体类型)。 | predicates: - Accept=application/json |
ContentType | 根据请求的 Content-Type 头部进行匹配 | 匹配请求中的 Content-Type 头部(指定请求的媒体类型)。 | predicates: - ContentType=application/json |
AcceptLanguage | 根据请求的 Accept-Language 头部进行匹配 | 匹配请求中的 Accept-Language 头部(指定请求的语言)。 | predicates: - AcceptLanguage=en-US |
Weight | 根据请求的权重进行匹配(用于负载均衡) | 匹配请求的权重。 | predicates: - Weight=10 |
Time | 根据请求的时间范围进行匹配(用于定时任务) | 匹配请求的时间范围。 | predicates: - Time=10:00-18:00 |
RemoteAddr | 根据请求的远程地址进行匹配 | 匹配请求发起者的 IP 地址(支持正则)。 | predicates: - RemoteAddr=192.168.1.* |
PathPattern | 使用正则表达式匹配路径 | 匹配符合正则表达式的路径。 |
路由断言工厂官方地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories
自定义的路由断言工厂
仿照官方的路由断言工厂,可以查看Query的,找到QueryRoutePredicateFactory
,
- 必须交给spring管理
- 命名必须以
RoutePredicateFactory
结尾 - 继承
AbstractRoutePredicateFactory<Config>
- 必须实现Config静态内部类,用来接收配置文件中的断言对应的信息
- 结合
shortcutFieldOrder
进行绑定
- 通过
apply
进行逻辑判断,true成功,false失败
- 自定义
package com.wzw.predicates;import lombok.Data;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;/*** 自定义断言*/
@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {public CheckAuthRoutePredicateFactory() {super(CheckAuthRoutePredicateFactory.Config.class);}public List<String> shortcutFieldOrder() {//跟config中的属性保持一致return Arrays.asList("name");}public Predicate<ServerWebExchange> apply(final CheckAuthRoutePredicateFactory.Config config) {return new GatewayPredicate() {public boolean test(ServerWebExchange exchange) {//如果name是zs,放行if(config.getName().equals("zs")){return true;}return false;}};}/*** 用于接收配置文件中的断言的信息*/@Datapublic static class Config {private String name;}
}
- 配置文件
routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,- CheckAuth=zs # zs是name的值
过滤器工厂配置
针对某一个路由进行过滤,需要在配置文件中配置
过滤器官方文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
- AddRequestHeader
- 请求头添加
X-Request-type
,值为app
# gateway 配置gateway:# 路由配置routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,filters:- AddRequestHeader=X-Request-type,app #请求头添加`X-Request-type`,值为`app`- id: user-routeuri: lb://user-servicepredicates:- Path=/user-server/**
- 输出一下
@GetMapping("/login")public String login(@RequestHeader("X-Request-type")String type){System.out.println(LocalDateTime.now());return "order login,type:"+type;}
- 请求头添加
- AddRequestParameter
- 添加请求参数param,值zhangsan
# gateway 配置gateway:# 路由配置routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,filters:- AddRequestParameter=param,zhangsan
- 输出一下
@GetMapping("/login")public String login(@RequestParam("param") String param){System.out.println(LocalDateTime.now());return "order login,param:"+param;}
- 为统一的路由添加统一前缀
order服务的实际访问路径http://127.0.0.1:8081/order-server/order/login
gateway的路由配置
访问路径# gateway 配置gateway:# 路由配置routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,filters:- PrefixPath=/order-server
http://127.0.0.1:80/order/login
,匹配了路由,gateway给http://127.0.0.1:80/order/login
加入了前缀/order-server
,实际访问的路径就是http://127.0.0.1:8081/order-server/order/login
- 重定向
重定向到百度
routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,filters:- RedirectTo=302,https://www.baidu.com
访问http://localhost/order/login
,将会跳转到https://www.baidu.com
- SetStatus修改状态码
只是修改返回的状态码,对实际的代码执行返回值没有影响
routes:- id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一uri: lb://order-server # 路由地址,lb 开头表示负载均衡,predicates:- Path=/order/** # 断言,路径匹配,filters:- SetStatus=500
虽然返回500,但是还是成功拿到返回值
常见的官方提供的过滤器
属性名称 | 作用 | 说明 | 示例配置 |
---|---|---|---|
AddRequestHeader | 向请求添加头信息 | 可以在请求中添加自定义请求头。 | filters: - AddRequestHeader=X-Auth-Token, my-token |
AddResponseHeader | 向响应添加头信息 | 可以在响应中添加自定义响应头。 | filters: - AddResponseHeader=X-Response-Header, my-response-value |
RemoveRequestHeader | 移除请求头 | 删除请求中的指定头信息。 | filters: - RemoveRequestHeader=X-Old-Header |
RemoveResponseHeader | 移除响应头 | 删除响应中的指定头信息。 | filters: - RemoveResponseHeader=X-Old-Response-Header |
SetPath | 修改请求的路径 | 重写请求的路径,通常用于路由转发时修改目标路径。 | filters: - SetPath=/new/path/{segment} |
RewritePath | 重写请求路径 | 使用正则表达式修改请求的路径。 | filters: - RewritePath=/old/path/(?<segment>.*), /new/path/${segment} |
PrefixPath | 在请求路径前添加前缀 | 在请求路径前加上指定的前缀。 | filters: - PrefixPath=/api |
RequestRateLimiter | 限流功能 | 限制请求的速率,例如设置每秒最大请求数。 | filters: - RequestRateLimiter=redisRateLimiter=2,1 |
CircuitBreaker | 熔断功能 | 配置熔断器,控制请求的处理流程。 | filters: - CircuitBreaker=name=myCircuitBreaker, fallbackUri=/fallback |
AddRequestParameter | 向请求中添加查询参数 | 向请求的 URL 中添加查询参数。 | filters: - AddRequestParameter=apiKey, 12345 |
SetRequestHeader | 设置请求头 | 设置请求的自定义头信息。 | filters: - SetRequestHeader=X-API-Key, my-api-key |
SetStatus | 设置响应状态码 | 设置请求处理后的响应状态码。 | filters: - SetStatus=200 |
Retry | 重试功能 | 配置请求的重试机制,例如重试次数、重试间隔。 | filters: - Retry=3,1000 |
PreserveHost | 保持请求中的原始 Host 信息 | 在转发请求时保留原始的 Host 信息。 | filters: - PreserveHost |
RedirectTo | 重定向功能 | 配置请求的重定向,通常用于将请求重定向到其他 URL。 | filters: - RedirectTo=301, https://example.com |
AddCookie | 向响应中添加 Cookie | 在响应中添加一个 Cookie。 | filters: - AddCookie=SESSIONID, 12345 |
RemoveCookie | 移除响应中的 Cookie | 从响应中删除指定的 Cookie。 | filters: - RemoveCookie=SESSIONID |
Delay | 延迟请求的处理 | 延迟处理请求的时间,通常用于模拟延迟。 |
自定义过滤器工厂
同样仿照官方的过滤器,以RedirectTo重定向为例
,改成一个是否携带name参数,
如果没带name参数,直接放行,
如果带了name参数,并且和配置文件中的值一样,就放行,
如果带了name参数,但是和配置文件中的值不一样,就404
http://localhost/order/login?name=zhangsan
package com.wzw.filters;import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;@Component
public class CheckAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CheckAuthGatewayFilterFactory.Config> {public CheckAuthGatewayFilterFactory() {super(CheckAuthGatewayFilterFactory.Config.class);}public List<String> shortcutFieldOrder() {return Arrays.asList("value");}public GatewayFilter apply(CheckAuthGatewayFilterFactory.Config config) {return (GatewayFilter) (exchange, chain) -> {String name=exchange.getRequest().getQueryParams().getFirst("name");//获取name参数,if(StringUtils.isNotBlank(name)){if(name.equals(config.getValue())){return chain.filter(exchange);}else{ //如果!=value,则拦截exchange.getResponse().setRawStatusCode(HttpStatus.SC_NOT_FOUND);return exchange.getResponse().setComplete();}}//否则正常访问return chain.filter(exchange);};}@Datapublic static class Config {private String value;}
}
全局过滤器
针对所有的路由过滤,一旦定义直接生效
打开请求日志
启动项目的时候加上参数-Dreactor.netty.http.server.accessLogEnabled=true
gateway统一配置跨域
-
通过配置文件的方式
CORS 只对浏览器有效,浏览器会根据同源策略限制不同源的请求,如果是通过 Postman 等工具发送请求,通常 CORS 配置不会生效,除非手动添加了一个头部Origin。spring:cloud:gateway:globalcors:cors-configurations:'[/**]': # 通配符,表示对所有的路由路径(/**)应用此配置allowedOrigins: "*" # 允许访问的源(域名)allowedMethods:- GET # 允许的 GET 方法,如果允许所有 HTTP 方法,可以使用 allowedMethods: "*"
-
[/**] 表示对所有请求路径都适用相同的跨域规则
- allowedOrigins
- 指定哪些外部域名可以发送跨域请求到你的服务
allowedOrigins:- "https://docs.spring.io"- "https://another-domain.com"
- 允许所有的源进行跨域请求,
allowedOrigins: "*"
- 指定哪些外部域名可以发送跨域请求到你的服务
- allowedMethods
- 可以添加一项或者多项
allowedMethods:- GET- POST- PUT- DELETE
- 可以添加一项或者多项
- allowedOrigins
-
允许所有 HTTP 方法,可以使用
allowedMethods: "*"
-
-
通过bean的方式
package com.wzw.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;@Configuration
public class GatewayCorsConfig {@Beanpublic CorsWebFilter corsWebFilter() {// 创建一个 CORS 配置对象CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://example.com"); // 允许的源corsConfiguration.addAllowedMethod("*"); // 允许的 HTTP 方法corsConfiguration.addAllowedHeader("*"); // 允许的请求头corsConfiguration.setAllowCredentials(true); // 是否允许携带凭证(cookies)// 设置源和配置UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", corsConfiguration); // 配置全局路径的 CORS 策略// 创建并返回 CorsWebFilter 过滤器return new CorsWebFilter(source);}
}
自定义全局过滤器
通过 @Component
注解和 GlobalFilter
接口实现,输出请求路径
package com.wzw.filters;import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
@Slf4j
public class LoginFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(exchange.getRequest().getPath().value());return chain.filter(exchange);}
}
全局过滤器和路由过滤器区别
特点 | 全局过滤器 | 路由过滤器 |
---|---|---|
适用范围 | 适用于所有路由 | 仅适用于特定的路由 |
配置位置 | 通过 @Component 注解和 GlobalFilter 接口实现 | 在 application.yml 或 application.properties 配置路由 |
执行顺序 | 在所有路由之前和之后执行 | 仅在路由匹配时执行 |
常见用途 | 身份验证、日志记录、全局限流等 | 路由相关的特定处理,例如修改请求头、路径重写等 |
其它
Service Unavailable
报错503
{"timestamp": "2024-11-10T08:16:05.013+00:00","path": "/zs/stock","status": 503,"error": "Service Unavailable","requestId": "f84c8477-2"
}
解决;
gateway子项目中添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>4.0.1</version></dependency>
gateway整合sentinel流控降级
可以针对不同路由限流,针对不同接口限流
- 引入依赖
<!-- sentinel整合gateway -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId><version>2023.0.1.2</version>
</dependency><!-- sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2023.0.1.2</version>
</dependency>
- 配置文件
是配置在业务模块,不是配置在gateway模块
spring:cloud:# sentinel 配置sentinel:transport:dashboard: 127.0.0.1:8080