热点参数中的paramIdx参数是一个固定值,也就是说仅能支持一个热点参数,但是entry = SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB); 确可以传多个参数(paramA, paramB),既然paramIdx要不是0(paramA),要不是1(paramB),为什么entry时却要支持多个参数呢。我不是很理解。
比如:我配置了一个热点规则为限制paramIdx=1,调用时必须要SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB),哪怕paramA不存在,也需要传一个空值。
如果是上述例子的话,我直接设置paramIdx=0,调用时SphU.entry(resourceName, EntryType.IN, 1, paramB)就行了吧。
这样的话paramIdx直接固定成0不行吗?
可以帮忙解答一下疑问吗?谢谢
2条答案
按热度按时间zbsbpyhn1#
我理解是因为可以适应更多的场景化的需求。我可以设置同一个resourceName, 针对不同的参数位置设置不同的规则。
举 2 个例子:
I understand that it is because it can adapt to more scenario-based needs. I can set the same resourceName and set different rules for different parameter positions.
Give 2 examples:
fumotvh32#
1、 SphU.entry(resourceName, EntryType.IN, 1, 手机品牌,手机型号),我可以单独针对手机品牌和手机型号进行限流,也就是说我这一个资源点可能是有多个参数进行把控的。
如果想实现热点参数切换(从手机品牌切换到手机型号)没什么问题,并且完全是可以的,但是我感觉现实中的这种需求并不会太多。当初加了手机品牌的热点参数,后来突然就不要了?在手机品牌的基础上累加手机型号热点参数我倒觉得更实用,但是同一个资源限流是不能针对多个热点参数的。
2、 用注解的方式,方法参数的位置已经是定的,方法的第2个参数可能才是热点参数。总不至于为了接入Sentinel,而去调整方法的参数位置顺序。
这个我觉得确实是合理的,并且现实中确实存在一些这样的需求。
单纯基于这两个观点结论的话,官方可以把热点参数的相关描述可以举几个切实的例子,分别使用什么场景。这样更好的我们理解。