sentinel在网关处做流控

在网关项目中添加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;
            }
        });
    }
}

正常情况请求返回时正常数据
在这里插入图片描述
请求过大返回的数据
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u014496893/article/details/114379248