Sentinel realiza el control de flujo en la puerta de enlace

Agregar dependencia de maven al proyecto de puerta de enlace

<!-- 引入 sentinel跟网管层的整合 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

Agregue información de configuración en application.yml

#配置sentinel
spring:
    sentinel:
      transport:
        dashboard: localhost:8883
        #控制台的port
        port: 8719

Abra la barra de menú de la puerta de enlace en la página centinela, agregue la regla de control de flujo. El
Inserte la descripción de la imagen aquí
nombre de la API es el ID de servidor configurado en el archivo de configuración
Inserte la descripción de la imagen aquí
y luego personalizamos la excepción que se activa si el tráfico es demasiado grande, la siguiente información se activará en la página de inicio


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;
            }
        });
    }
}

Datos normales cuando la solicitud se devuelve en condiciones normales Los datos
Inserte la descripción de la imagen aquí
devueltos por la solicitud son demasiado grandes
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/u014496893/article/details/114379248
Recomendado
Clasificación