美文网首页
@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