在网关项目中添加maven依赖
<!-- 引入 sentinel跟网管层的整合 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
在application.yml添加配置信息
#配置sentinel
spring:
sentinel:
transport:
dashboard: localhost:8883
#控制台的port
port: 8719
在sentinel页面打开网关菜单栏,添加流控规则
API名称是配置文件里面配置的serverId
然后我们再自定义如果流量过大触发的异常,如果流量过大就会触发下面的信息给前端页面
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import com.alibaba.fastjson.JSON;
import com.hjh.common.exception.BizCodeEnume;
import com.hjh.common.utils.R;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* @date 2021-02-22 2:19 下午
* @description sentinel网关层 返回我们自己的东西错误代码
* TODO 响应式编程 - 天然支持大并发系统
*/
@Configuration
public class MySeckillSentinelConfig {
public MySeckillSentinelConfig() {
GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
/**
* 网关限流了请求,就会掉用此方法 Mono Flux
*/
@Override
public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
R error = R.error(BizCodeEnume.TO_MANY_REQUEST.getCode(), BizCodeEnume.TO_MANY_REQUEST.getMsg());
String s = JSON.toJSONString(error);
Mono<ServerResponse> body = ServerResponse.ok().body(Mono.just(s), String.class);
return body;
}
});
}
}
正常情况请求返回时正常数据
请求过大返回的数据