文章目录
- gateway能做什么
- Gateway
- Gateway+Nacos
- 路由断言工厂配置
- 过滤器工厂配置
- 全局过滤器
- 全局过滤器和路由过滤器区别
- 其它
-
- [Service Unavailable](#Service Unavailable)
- gateway整合sentinel流控降级
gateway能做什么
springcloud官方网关框架,对外暴露一个统一的API接口,客户端仅需与API网关交互,而无需直接调用后端的各个微服务,提高系统的安全性,可以实现一些和业务逻辑无关的公共逻辑,如负载均衡、限流与熔断、认证和授权、数据加密、路由转发等。
- Spring Cloud Gateway功能特征
- 动态路由:能够匹配任何请求属性:
- 支持路径重写;
- 集成Spring Cloud服务发现功能(Nacos、Eruka);
- 可集成流控降级功能(Sentinel、.Hystriⅸ);
- 可以对路由指定易于编写的Predicate(断言)和Filter(过滤器);
Gateway
- 目录
- gateway配置文件
yaml
spring:
application:
name: gateway
cloud:
# 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/login
filters:
- StripPrefix=1 # 从请求的路径中移除第一个层级的路径前缀 移除后 http://localhost:8081/order/login
- id: user-route # 路由到user服务
uri: http://localhost:8082
predicates:
- Path=/user-server/**
filters:
- StripPrefix=1
server:
port: 80
启动项目,通过网关访问order的接口成功
routes
:路由配置
routres的属性如下
Gateway+Nacos
如果服务路径写死在yml中,维护起来很麻烦,现在通过nacos访问
- 引入nacos依赖
xml
<!-- 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配置
yaml
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 //nacos没有配置鉴权,所以只有ip、端口
- 修改gateway配置
yaml
# 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/login
filters:
- StripPrefix=1 # 从请求的路径中移除第一个层级的路径前缀 移除后 http://localhost:8081/order/login
- id: user-route
uri: lb://user-service
predicates:
- 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
<?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]
之后的请求。yamlroutes: - 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,并且值是数字
yamlroutes: - 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请求方法的断言工厂
MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。
-
判断请求是否GET请求
yamlroutes: - 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
-
-
基于Quey请求参数的断言工厂
QueryRoutePredicateFactory:接收两个参数,请求param和正则表达式,判断请求参数是否具有给定名称且值与正则表达式匹配.
-
判断Query参数中是否有name参数,name的值不限制,
-
如果是Query=name,z|w,那么,name值必须是z或者w
yamlroutes: - 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:接收一个组名,权重,然后对于同一个组内的路由按照权重转发,权重大的分配到的几率大
yamlroutes -id:weight_routel uri:host1 predicates: -Path=/product/** -Weight=group3,1 -id:weight_route2 uri:host2 predicates: -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 |
使用正则表达式匹配路径 | 匹配符合正则表达式的路径。 |
自定义的路由断言工厂
仿照官方的路由断言工厂,可以查看Query的,找到QueryRoutePredicateFactory
,
- 必须交给spring管理
- 命名必须以
RoutePredicateFactory
结尾 - 继承
AbstractRoutePredicateFactory<Config>
- 必须实现Config静态内部类,用来接收配置文件中的断言对应的信息
- 结合
shortcutFieldOrder
进行绑定
- 通过
apply
进行逻辑判断,true成功,false失败
- 自定义
java
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;
}
};
}
/**
* 用于接收配置文件中的断言的信息
*/
@Data
public static class Config {
private String name;
}
}
- 配置文件
yaml
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
yaml# 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-route uri: lb://user-service predicates: - Path=/user-server/**
- 输出一下
java@GetMapping("/login") public String login(@RequestHeader("X-Request-type")String type){ System.out.println(LocalDateTime.now()); return "order login,type:"+type; }
- 请求头添加
-
AddRequestParameter
- 添加请求参数param,值zhangsan
yaml# gateway 配置 gateway: # 路由配置 routes: - id: order-route # 路由id,路由到order服务,没有固定规则,但需要保证路由唯一 uri: lb://order-server # 路由地址,lb 开头表示负载均衡, predicates: - Path=/order/** # 断言,路径匹配, filters: - AddRequestParameter=param,zhangsan
- 输出一下
java@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的路由配置yaml# 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
-
重定向
重定向到百度
groovy
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修改状态码
只是修改返回的状态码,对实际的代码执行返回值没有影响
groovy
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
java
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);
};
}
@Data
public static class Config {
private String value;
}
}
全局过滤器
针对所有的路由过滤,一旦定义直接生效
打开请求日志
启动项目的时候加上参数-Dreactor.netty.http.server.accessLogEnabled=true
gateway统一配置跨域
-
通过配置文件的方式
CORS 只对浏览器有效,浏览器会根据同源策略限制不同源的请求,如果是通过 Postman 等工具发送请求,通常 CORS 配置不会生效,除非手动添加了一个头部Origin。
yamlspring: cloud: gateway: globalcors: cors-configurations: '[/**]': # 通配符,表示对所有的路由路径(/**)应用此配置 allowedOrigins: "*" # 允许访问的源(域名) allowedMethods: - GET # 允许的 GET 方法,如果允许所有 HTTP 方法,可以使用 allowedMethods: "*"
-
/\*\*\] 表示对所有请求路径都适用相同的跨域规则 * allowedOrigins * 指定哪些外部域名可以发送跨域请求到你的服务 ```yaml allowedOrigins: - "https://docs.spring.io" - "https://another-domain.com" ``` * 允许所有的源进行跨域请求,`allowedOrigins: "*"` * allowedMethods * 可以添加一项或者多项 ```yaml allowedMethods: - GET - POST - PUT - DELETE ```
-
-
通过bean的方式
java
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 {
@Bean
public 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
接口实现,输出请求路径
java
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 {
@Override
public 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
java
{
"timestamp": "2024-11-10T08:16:05.013+00:00",
"path": "/zs/stock",
"status": 503,
"error": "Service Unavailable",
"requestId": "f84c8477-2"
}
解决;
gateway子项目中添加依赖
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>4.0.1</version>
</dependency>
gateway整合sentinel流控降级
可以针对不同路由限流,针对不同接口限流
- 引入依赖
xml
<!-- 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模块
yaml
spring:
cloud:
# sentinel 配置
sentinel:
transport:
dashboard: 127.0.0.1:8080