(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
对于注释支持中的参数流控制,我们已经在#256中解决了这个问题,它将在1.4.0中发布。
对于权限规则,源站只能在入站流量入口传递(例如Web API、Dubbo提供者)。使用注释的地方通常不是交通入口,因此即使您使用ContextUtil.enter(context,origin)在注释方法周围传递原点,它也不会生效。
原回答者GitHub用户sczyh30
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。