请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

4回答

大目 2019-07-23 19:16:56

回复 慕粉2104306171: localhost:8090/test-hot?a=3&b=2就应该会报异常啊……这是SentinelResource注解使用的方式,你没有提供blockHandler或者fallback。

你看下 8-25 扩展Sentinel04-透过现象看本质 就知道原因了。

UrlBlockHandler是CommonFilter整合方式的异常处理。CommonFilter不支持热点参数限流规则。

而你那个test-hot上面加了@SentinelResource注解,对于注解的使用方式,应该用@SentinelResource(blockHandler = xxx)去指定造成限流/降级异常时的返回。

至于/shares/1 我这边没能复现,我不知道你规则怎么配的。限流降级规则都无法出现你截图的异常界面。要不你把/shares/1的代码,以及控制台的配置贴一下吧。我看你GitHub上17:29之后没有提交,我这边代码就是最新的。


//img1.sycdn.imooc.com//szimg/5d36ebf309a0606500000000.jpg


最后总结一下:

  1. 对于Spring MVC那些端点(没有加@SentinelResource注解也会显示在控制台上那些),是通过CommonFilter整合Sentinel的,这种方式用UrlBlockHandler去提供限流/降级的返回。这种方式目前不支持参数热点限流。

  2. 对于@SentinelResource注解,用@SentinelResource(blockHandler = xxx)或者 fallback属性提供限流/降级的返回。

这些我视频里都有讲解,建议花一点时间再看一下。Sentinel的细节比较多,不是那么好理解。

1 回复 有任何疑惑可以回复我~
  • 结合自己的测试,终于理解了这两点!
    回复 有任何疑惑可以回复我~ 2019-08-19 11:30:11
大目 2019-07-23 18:00:32

您好,我用您的代码,用/baidu这个端点测试是OK的。

您的问题没有复现。帮忙提供下复现问题的具体步骤。


https://img1.sycdn.imooc.com//szimg/5d36daa80989b9e809100524.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 shipping #1
    老师访问这个
    localhost:8090/test-hot?a=3&b=2
    我加了热点规则,传入参数a 限流了
    
    或者localhost:8090/shares/1
    随便加个限流规则
    回复 有任何疑惑可以回复我~ 2019-07-23 18:39:59
  • 提问者 shipping #2
    我发现我用/baidu这个端点测试也是可以复现...,代码是最新的
    回复 有任何疑惑可以回复我~ 2019-07-23 18:45:36
提问者 shipping 2019-07-21 23:44:13

没有触发规则页面可以正常返回,只有触发规则的时候页面才会这样。

我自己debug,是抛了一个ServletException,在CommonFilter被Tracer捕获了,控制台显示又是ParamFlowException引起的,是我漏了什么吗

https://img1.sycdn.imooc.com//szimg/5d3486910915077213810869.jpg

0 回复 有任何疑惑可以回复我~
  • 大目 #1
    建议把代码发出来,并提供完整的复现步骤(例如配置的规则是什么样的),我来看看。
    按理不会有NestedServletException后面的提示消息。
    回复 有任何疑惑可以回复我~ 2019-07-21 23:58:35
  • 提问者 shipping 回复 大目 #2
    老师,麻烦了 https://github.com/pingwurth/springCloud.git
    回复 有任何疑惑可以回复我~ 2019-07-23 17:37:05
大目 2019-07-21 18:58:38

您好,从您截图出来的代码,感觉没什么问题。

在MyUrlBlockHandler上打个断点,看:

  1. 断点能否加载(如果能加载,那么断点应该会变成对号的标记)

  2. 如果能够加载,再把断点打到CommonFilter中,看代码是怎么执行的。

另外,触发限流的话,应该会有flow limiting的提示,您这边是No message available. 我感觉不像是限流导致的。

您可以先自行定位看看,如果定位不出来,可以把代码托管到GitHub或者Gitee,并给出详细复现步骤,我来看看。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信