首页后端开发PHPJava @SentinelResource怎么应用

Java @SentinelResource怎么应用

时间2023-07-07 08:06:02发布访客分类PHP浏览1423
导读:这篇文章主要介绍了Java@SentinelResource怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java@SentinelResource怎么应用文章都会有所收获,下面我们一起来看看吧。...
这篇文章主要介绍了Java@SentinelResource怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java@SentinelResource怎么应用文章都会有所收获,下面我们一起来看看吧。

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

Module:cloudalibaba-sentinel-service8401

pom新增依赖

dependency>
    !--引入自己定义的api通用包,可以使用Payment支付Entity-->
    
groupId>
    com.atguigu.springcloud/groupId>
    
artifactId>
    cloud-api-common/artifactId>
    
version>
${
project.version}
    /version>
    
/dependency>
    

这个依赖来自自己的模板,这里的这个依赖就是去数据库查询的一部分业务处理

新增Controller

@RestController
publicclassRateLimitController
{

@GetMapping("/byResource")
@SentinelResource(value="byResource",blockHandler="handleException")
publicCommonResultbyResource()
{
    
returnnewCommonResult(200,"按资源名称限流测试OK",newPayment(2020L,"serial001"));

}

publicCommonResulthandleException(BlockExceptionexception)
{
    
returnnewCommonResult(444,exception.getClass().getCanonicalName()+"\t服务不可用");

}

}
    

图形配置和代码关系

表示1秒钟内查询次数大于1,就跑到我们自定义的处流,限流

测试1

1秒钟点击1下,OK

超过上述,疯狂点击,返回了自己定义的限流处理信息,限流发生

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

通过访问的URL来限流,会返回Sentinel自带默认的限流处理信息

Controller修改为:

@RestController
publicclassRateLimitController
{

@GetMapping("/byResource")
@SentinelResource(value="byResource",blockHandler="handleException")
publicCommonResultbyResource()
{
    
returnnewCommonResult(200,"按资源名称限流测试OK",newPayment(2020L,"serial001"));

}

publicCommonResulthandleException(BlockExceptionexception)
{
    
returnnewCommonResult(444,exception.getClass().getCanonicalName()+"\t服务不可用");

}

@GetMapping("/rateLimit/byUrl")
@SentinelResource(value="byUrl")
publicCommonResultbyUrl()
{
    
returnnewCommonResult(200,"按url限流测试OK",newPayment(2020L,"serial002"));

}

}
    

测试2

访问一次

http://localhost:8401/rateLimit/byUrl

正常

疯狂点击http://localhost:8401/rateLimit/byUrl

会返回Sentinel自带的限流处理结果

上面兜底方案面临的问题

1 系统默认的,没有体现我们自己的业务要求。

2 依照现有条件,我们自定义的处理方法又和业务代码耦合在一块,不直观。

3 每个业务方法都添加一个兜底的,那代码膨胀加剧。

4 全局统一的处理方法没有体现。

客户自定义限流处理逻辑

创建CustomerBlockHandler类用于自定义限流处理逻辑

测试后我们自定义的出来了

控制类增加新的业务

@GetMapping("/rateLimit/customerBlockHandler")
@SentinelResource(value="customerBlockHandler",
blockHandlerClass=CustomerBlockHandler.class,blockHandler="handleException2")
publicCommonResultcustomerBlockHandler()
{
    
returnnewCommonResult(200,"按客户自定义限流处理逻辑");

}
    

自定义通用的限流处理逻辑

blockHandlerClass = CustomerBlockHandler.class

blockHandler = handleException2

上述配置:找CustomerBlockHandler类里的handleException2方法进行兜底处理 定义通用的限流处理逻辑

测试3

测试后我们自定义的出来了

关于“Java@SentinelResource怎么应用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java@SentinelResource怎么应用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

java@sentinelresource

若转载请注明出处: Java @SentinelResource怎么应用
本文地址: https://pptw.com/jishu/293763.html
Java对象如何转换为字节序列 Java怎么实现合并word文档

游客 回复需填写必要信息