https://github.com/alibaba/Sentinel/wiki/%E7%BD%91%E5%85%B3%E9%99%90%E6%B5%81
pom.xml
<dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-sentinelartifactId> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-alibaba-sentinel-gatewayartifactId> dependency>
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloudalibabaartifactId> <groupId>com.wsm.springcloudgroupId> <version>0.0.1-SNAPSHOTversion> parent> <modelVersion>4.0.0modelVersion> <artifactId>gatewayartifactId> <dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-gatewayartifactId> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-sentinelartifactId> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-alibaba-sentinel-gatewayartifactId> dependency> dependencies> project>
application.yml
server:
port: 8060
spring:
application:
name: api-gateway
cloud:
# gateway的配置
gateway:
# 路由规则
routes:
- id: order_route # 路由的唯一标识, 路由到 order
# uri: http://localhost:8020 # 需要转发的地址
uri: lb://order-nacos-service # 需要转发的地址 lb:使用nacos中的本地负载均衡策略
# 断言规则 用于路由规则的匹配
predicates:
- Path=/order-serv/**
# http://localhost:8060/order-serv/order/add 路由转到
# http://localhost:8020/order-serv/order/add
- After=2017-01-20T17:42:47.789-07:00[Asia/Shanghai]
- Header=X-Request-Id,\d+
- Method=GET
- Query=name,zhangsan|lisi
- CheckAuth=lisi
filters:
- StripPrefix=1 # 转发之前去掉第一层路径
# http://localhost:8020/order-serv/order/add 过虑成
# http://localhost:8020/order/add
- AddRequestHeader=X-Request-color, blue
- AddRequestParameter=color, red
- PrefixPath=/mall-order #添加前缀, 对应微服务需要配置context-path
- RedirectTo=302, https://www.baidu.com/ #重定向到百度
- SetStatus=404
- CheckAuth=lisi
#跨域配置
globalcors:
cors-configurations:
'[/**]': # 允许蹃域访问的资源
## allowedOrigins: "https://docs.spring.io" # 跨域允许来源
allowedOrigins: "*" # 跨域允许来源
allowedMethods:
- GET
- POST
# 配置 Nacos
nacos:
server-addr: 127.0.0.1:8848
discovery:
# server-addr: 127.0.0.1:8848
username: nacos
password: nacos
namespace: public
sentinel:
transport:
dashboard: 127.0.0.1:8858
package com.wsm.config;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import javax.annotation.PostConstruct;
import java.util.HashMap;
@Configuration
public class GatewayConfig {
@PostConstruct
public void init() {
BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {
@Override
public Mono handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
System.out.println("========="+throwable);
HashMap map = new HashMap();
map.put("code",HttpStatus.TOO_MANY_REQUESTS.toString());
map.put("message","限流了");
//自定义异常处理
return ServerResponse.status(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(map));
}
};
GatewayCallbackManager.setBlockHandler(blockRequestHandler);
}
}
server:
port: 8060
spring:
application:
name: api-gateway
cloud:
# gateway的配置
gateway:
# 路由规则
routes:
- id: order_route # 路由的唯一标识, 路由到 order
# uri: http://localhost:8020 # 需要转发的地址
uri: lb://order-nacos-service # 需要转发的地址 lb:使用nacos中的本地负载均衡策略
# 断言规则 用于路由规则的匹配
predicates:
- Path=/order-serv/**
# http://localhost:8060/order-serv/order/add 路由转到
# http://localhost:8020/order-serv/order/add
- After=2017-01-20T17:42:47.789-07:00[Asia/Shanghai]
- Header=X-Request-Id,\d+
- Method=GET
- Query=name,zhangsan|lisi
- CheckAuth=lisi
filters:
- StripPrefix=1 # 转发之前去掉第一层路径
# http://localhost:8020/order-serv/order/add 过虑成
# http://localhost:8020/order/add
- AddRequestHeader=X-Request-color, blue
- AddRequestParameter=color, red
- PrefixPath=/mall-order #添加前缀, 对应微服务需要配置context-path
- RedirectTo=302, https://www.baidu.com/ #重定向到百度
- SetStatus=404
- CheckAuth=lisi
#跨域配置
globalcors:
cors-configurations:
'[/**]': # 允许蹃域访问的资源
## allowedOrigins: "https://docs.spring.io" # 跨域允许来源
allowedOrigins: "*" # 跨域允许来源
allowedMethods:
- GET
- POST
# 配置 Nacos
nacos:
server-addr: 127.0.0.1:8848
discovery:
# server-addr: 127.0.0.1:8848
username: nacos
password: nacos
namespace: public
sentinel:
transport:
dashboard: 127.0.0.1:8858
scg:
fallback:
response-body: "{code:'10001',message:'1001 test'}"
mode: response
Original: https://www.cnblogs.com/mingforyou/p/15838995.html
Author: 残星
Title: Spring Cloud Gateway整合Sentinel流控降级
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540653/
转载文章受原作者版权保护。转载请注明原作者出处!