Springcloud gateway sentinel nacos

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>

        <!-- 用于sentinel动态读取nacos的配置 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

2. 添加sentinel限流异常和sentinel全局过滤器
package com.wuhobin.springbootgateway.config;

/**
 * gateway sentinel
 * @author wuhongbin
 * @version 1.0.0
 * @date 2023/12/28 15:23
 * @description
 */
@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;
    }

    /**
     * 限流的异常处理器
     * @return
     */
    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SentinelFallbackHandler sentinelFallbackHandler() {
        return new SentinelFallbackHandler();
    }

    /***
     * Sentinel路由处理核心过滤器
     * @return
     */
    @Bean
    @Order(-1)
    public GlobalFilter sentinelGatewayFilter() {
        return new SentinelGatewayFilter();
    }

}
3. sentinel限流异常处理
package com.wuhobin.springbootgateway.handler;

/**
 * 自定义触发限流时的返回异常
 * @author wuhongbin
 * @version 1.0.0
 * @date 2023/12/28 16:34
 * @description
 */
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:
        #sentinel控制台访问路径
        dashboard: 127.0.0.1:8080
        port: 8080
      datasource:
        ds:
          nacos:
            #读取哪个命名空间的配置(要和上面的nacos.config.namespace配置一致,否则会读不到文件。如果默认public,则可以不写)
            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"
	}
]
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值