Springcloud gateway sentinel nacos
1. 项目添加以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2. 添加sentinel限流异常和sentinel全局过滤器
package com.wuhobin.springbootgateway.config;
@Configuration
public class GatewaySentinelConfiguration {
private final List<ViewResolver> viewResolvers;
private final ServerCodecConfigurer serverCodecConfigurer;
public GatewaySentinelConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,
ServerCodecConfigurer serverCodecConfigurer) {
this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
this.serverCodecConfigurer = serverCodecConfigurer;
}
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SentinelFallbackHandler sentinelFallbackHandler() {
return new SentinelFallbackHandler();
}
@Bean
@Order(-1)
public GlobalFilter sentinelGatewayFilter() {
return new SentinelGatewayFilter();
}
}
3. sentinel限流异常处理
package com.wuhobin.springbootgateway.handler;
public class SentinelFallbackHandler implements WebExceptionHandler {
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
ServerHttpResponse serverHttpResponse = exchange.getResponse();
serverHttpResponse.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
return MonoUtils.response(serverHttpResponse, CommonResult.failed("系统繁忙,请稍后重试!"));
}
}
4. nacos配置如下
spring:
cloud:
sentinel:
eager: true
transport:
dashboard: 127.0.0.1:8080
port: 8080
datasource:
ds:
nacos:
namespace: b417a5f2-5e80-486b-bd2f-8a585ca3e82f
server-addr: 127.0.0.1:8848
dataId: springboot-sentinel-gateway.json
groupId: springboot-gateway
data-type: json
rule-type: flow
gateway:
discovery:
locator:
enabled: true
default-filters:
- name: IpBlackListFilter
args:
blackIpList:
- 101.43.126.26
routes:
- id: springboot-nacos
uri: lb://springboot-nacos-service
predicates:
- Path=/nacos/**
filters:
- StripPrefix=1
- id: springboot-sentinel
uri: lb://springboot-sentinel-service
predicates:
- Path=/sentinel/**
filters:
- StripPrefix=1
- id: springboot-uaa
uri: lb://springboot-uaa-service
predicates:
- Path=/uaa/**
filters:
- StripPrefix=1
gateway:
security:
http-urls:
- /uaa/auth/login
5. springboot-sentinel-gateway.json配置如下
[
{
"resource":"springboot-uaa",
"limitApp":"default",
"grade":1,
"count":1,
"strategy":0,
"controlBehavior":0,
"clusterMode":"false"
}
]