开发者社区 > 云原生 > 正文

关于注解@SentinelResource是否支持在热点参数限流中使用的问题

(1)根据示例,也写了一个测试热点参数限流的方法,使用的是@SentinelResource注解,具体如下:

@RequestMapping(value = "/hot/{name}",method=RequestMethod.GET) @SentinelResource(value = "mobile.personal.system.demo.param.hot", entryType = EntryType.IN, blockHandler = "exceptionHandler") public Map<String, Object> hot(@PathVariable("name") String name) throws Exception { long s = System.currentTimeMillis(); String result = String.format("Hello " + name + ", ParamFlow at %d", s); System.out.println("ParamFlow ---->" + result); Map<String, Object> resultMap = new HashMap<String, Object>(); resultMap.put("result", result); return resultMap; }

(2)启动后,在日志sentinel-record.log中显示,说明热点参数限流规则已经从nacos获取成功:

2018-11-26 21:44:04 [NacosDataSource] New property value received for (localhost, paramFlow:mobile-personal-system, DEFAULT_GROUP): [{"app":"mobile-personal-system","count":0.0,"gmtCreate":1543239844214,"gmtModified":1543239844214,"grade":1,"id":3,"ip":"192.168.31.162","limitApp":"default","paramIdx":0,"port":8719,"resource":"mobile.personal.system.demo.param.hot","rule":{"count":0.0,"grade":1,"limitApp":"default","paramFlowItemList":[],"paramIdx":0,"resource":"mobile.personal.system.demo.param.hot"}}] 2018-11-26 21:44:04 [DynamicSentinelProperty] Config will be updated to: [ParamFlowRule{resource=mobile.personal.system.demo.param.hot, limitApp=default, grade=1, paramIdx=0, count=0.0, paramFlowItemList=[]}] 2018-11-26 21:44:04 [ParamFlowRuleManager] Hot spot parameter flow rules received: {mobile.personal.system.demo.param.hot=[ParamFlowRule{resource=mobile.personal.system.demo.param.hot, limitApp=default, grade=1, paramIdx=0, count=0.0, paramFlowItemList=[]}]} 2018-11-26 21:44:04 [API Server] Receiving rule change (type:parameter flow rule): [{"count":0.0,"grade":1,"limitApp":"default","paramFlowItemList":[],"paramIdx":0,"resource":"mobile.personal.system.demo.param.hot"}] 2018-11-26 21:45:10 [ParamFlowSlot] Creating parameter metric for: mobile.personal.system.demo.param.hot

(3)规则设置:

资源名 | 参数索引 | 流控模式 | 单机阈值 | 例外项数目 mobile.personal.system.demo.param.hot | 0 | QPS | 0 | 0 使用:http://localhost:7901/mobile-personal-system/param/hot/zhangsan 访问,但是,热点参数限流规则一直没生效。

(4)同时,我看到:

(a) sentinel-demo-parameter-flow-control例子里使用的是: entry = SphU.entry(resourceName, EntryType.IN, 1, param); (b) AuthorityDemo例子使用的是: ContextUtil.enter(resource, origin); entry = SphU.entry(resource); (c) SentinelResourceAspect的方法里使用的是 entry = SphU.entry(resourceName, entryType);

(5)另外,用硬编码的方式,实现了同需求的热点参数限流,经测试,规则是生效的。

这是否说明,目前版本@SentinelResource注解还不支持在热点参数限流中使用?param在当前版本的注解中还不支持?

(6)黑白名单控制,目前是不是也只能通过硬编码的方式,规则才能正常生效?1.4.0-SNAPSHOT版本也仍未支持在黑白名单控制下使用@SentinelResource注解配置?

原提问者GitHub用户huangcanhui2018

展开
收起
码字王 2023-05-19 19:27:00 118 0
1 条回答
写回答
取消 提交回答
  • 对于注释支持中的参数流控制,我们已经在#256中解决了这个问题,它将在1.4.0中发布。

    对于权限规则,源站只能在入站流量入口传递(例如Web API、Dubbo提供者)。使用注释的地方通常不是交通入口,因此即使您使用ContextUtil.enter(context,origin)在注释方法周围传递原点,它也不会生效。

    原回答者GitHub用户sczyh30

    2023-05-19 22:46:29
    赞同 展开评论 打赏
问答分类:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载