美文网首页
@SentinelResource配置(上)

@SentinelResource配置(上)

作者: Shaw_Young | 来源:发表于2020-08-24 20:27 被阅读0次

    按资源名称限流+后续处理

    1. 启动Nacos成功
    2. 启动Sentinel成功
    3. Module
      修改一下cloudalibaba-sentinel-service8401
      pom新增如下:
    <dependency>
        <groupId>com.young.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
    </dependency>
    

    这个模块下面只有两个实体类

    package com.young.springcloud.entities;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Payment implements Serializable {
        private Long id;
        private String serial;
    }
    
    package com.young.springcloud.entities;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class CommonResult <T>{
    
        private Integer code;
        private String message;
        private T data;
    
        public CommonResult(Integer code, String message, T data) {
            this.code = code;
            this.message = message;
            this.data = data;
        }
    
        public CommonResult(Integer code, String message){
            this(code,message,null);
        }
    }
    

    在cloudalibaba-sentinel-service8401中新增一个业务类

    package com.young.springcloud.alibaba.controller;
    
    import com.alibaba.csp.sentinel.annotation.SentinelResource;
    import com.alibaba.csp.sentinel.slots.block.BlockException;
    
    import com.young.springcloud.entities.*;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class RateLimitController {
        @GetMapping("/byResource")
        @SentinelResource(value = "byResource", blockHandler = "handleException")
        public CommonResult byResource() {
            return new CommonResult(200, "按资源名称限流测试OK", new Payment(2020L, "serial001"));
        }
    
        public CommonResult handleException(BlockException exception) {
            return new CommonResult(444, exception.getClass().getCanonicalName() + "\t 服务不可用");
        }
    }
    
    1. 配置流控规则


    2. 测试
      1秒钟点击1下,OK
      超过上述问题,疯狂点击,返回了自己定义的限流处理信息,限流发送
    3. 额外问题
      此时关闭微服务8401看看
      Sentinel控制台,流控规则消失了?????
      临时/持久?

    按照Url地址限流+后续处理

    通过访问的URL来限流,会返回Sentinel自带默认的限流处理问题
    在RateLimitController类中新增如下代码:

    @GetMapping("/rateLimit/byUrl")
    @SentinelResource(value = "byUrl")
    public CommonResult byUrl() {
        return new CommonResult(200, "按url限流测试OK", new Payment(2020L, "serial002"));
    }
    

    sentinel控制台配置


    测试
    疯狂点击http://localhost:8401/rateLimit/byUrl
    会返回sentinel自带的限流结果处理

    相关文章

      网友评论

          本文标题:@SentinelResource配置(上)

          本文链接:https://www.haomeiwen.com/subject/nhnldktx.html