按资源名称限流+后续处理
- 启动Nacos成功
- 启动Sentinel成功
- 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秒钟点击1下,OK
超过上述问题,疯狂点击,返回了自己定义的限流处理信息,限流发送 - 额外问题
此时关闭微服务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控制台配置
![](https://img.haomeiwen.com/i14359229/0415a66d52b6faf0.png)
测试
疯狂点击http://localhost:8401/rateLimit/byUrl
会返回sentinel自带的限流结果处理
![](https://img.haomeiwen.com/i14359229/34164311cfc2badb.png)
网友评论