Sentinel入门与进阶:微服务流量控制的最佳实践 ( 四 )
Sentinel
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
项目地址:https://gitcode.com/gh_mirrors/sentine/Sentinel
免费下载资源
·
6.资源限流
6.1.修改程序
6.1.1.在Controller中增加下列代码
@Autowired
private TestService testService;
@RequestMapping("/callService")
public String callService(){
return testService.testMethod();
}
6.1.2.增加service接口及接口实现类
package com.yuan.scasentineldashboard.service;
public interface TestService {
String testMethod();
}
package com.yuan.scasentineldashboard.service.impl;
import com.yuan.scasentineldashboard.service.TestService;
import org.springframework.stereotype.Service;
@Service
public class TestServiceImpl implements TestService {
@Override
public String testMethod() {
return "这是service中的方法";
}
}
6.1.3.测试
浏览器访问 http://localhost:9000/sentinelTest/callService
6.2.pom.xml 增加 依赖
增加依赖以支持资源限流的注解
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-annotation-aspectj</artifactId>
</dependency>
6.3.修改方法
在serviceImpl中增加 @SentinelResource注解,就可以实现对该方法的限流
@Override
@SentinelResource(value = "testMethod")
public String testMethod() {
return "这是service中的方法";
}
6.4.Sentinel 监听
查看 Sentinel Dashboard 可以看到
6.5.修改限流配置
[
{
"resource": "/sentinelTest/sayHello",
"limitApp": "default",
"grade": 1,
"count": 3
},
{
"resource": "/sentinelTest/callService",
"limitApp": "default",
"grade": 1,
"count": 3
},
{
"resource": "testMethod",
"limitApp": "default",
"grade": 1,
"count": 2
}
]
6.6.查看 sentinel 流控规则
6.7.测试
1秒内 连续请求 3次, 触发方法限流后抛出了异常
1秒内 连续请求4次, 触发请求限流
6.8.实现方法的限流
通过刚才的例子,我们看到方法已经成功被限流了,但是限流后直接抛出了异常, 实际开发中,我们不希望展示一个生硬的报错,我们希望限流后能自定义一些处理方式。我们可修改@SentinelResource注解的参数来达到目的,
注意:处理的方法需要与被限流的方法保持参数相同,并在最后加上BlockException异常参数,同时返回类型必须相同。
6.8.1.修改serviceImpl 类
package com.yuan.scasentineldashboard.service.impl;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.yuan.scasentineldashboard.service.TestService;
import org.springframework.stereotype.Service;
@Service
public class TestServiceImpl implements TestService {
@Override
@SentinelResource(value = "testMethod", blockHandler = "blockMethod")
public String testMethod(String a) {
return "这是service中的方法";
}
public String blockMethod(String a, BlockException e){
return "方法被限流了";
}
}
6.8.2.测试效果
1秒内 连续请求 3次, 触发方法限流后执行限流方法
GitHub 加速计划 / sentine / Sentinel
19
6
下载
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
最近提交(Master分支:5 个月前 )
195150bc
* fix issue 2485 which occur oom when using async servlet request.
* optimize imports
* 1. fix the same issue in the webmvc-v6x
2. improve based on review comments 4 个月前
b78b09d3
4 个月前
更多推荐
已为社区贡献7条内容
所有评论(0)