请稍等 ...
×

采纳答案成功!

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

sentinel 添加流控规则不显示的问题

控制台添加流控规则
图片描述

图片描述

图片描述

添加后的流控规则没有显示,也没有生效。但是dashboard后台日志显示
2020-01-04 01:27:23.943 INFO 19076 — [nio-8080-exec-7] c.a.c.s.d.client.SentinelApiClient : setRules: success
已经成功了。

spring cloud alibaba:2.1.1.RELEASE
sentinel:1.7.0

辛苦大目老师,帮忙指导一下。

正在回答

4回答

不好意思,周末发热了,咳得肺要出来了,身体不太舒服……刚刚抽了点时间给你看了下。

首先,你的问题是能够复现的,你的分析也没有任何问题。

我按照你的思路都快给官方提issue了。还好在提issue之前,我分析了下你的POM.xml。

你的pom.xml手动添加了FastJSON

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.8</version>
</dependency>

这个版本太低了,直觉告诉我,这块不太对劲。于是我把这个依赖干掉了,发现恢复正常了。

所以本质上,这是一个低版本FastJSON解析字符串失败的问题。

知道答案之后,我顺便到Sentinel的GitHub搜了一把,发现在 https://github.com/alibaba/Sentinel/wiki/FAQ#q-sentinel-%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%B2%A1%E6%9C%89%E6%98%BE%E7%A4%BA%E6%88%91%E7%9A%84%E5%BA%94%E7%94%A8%E6%88%96%E8%80%85%E6%B2%A1%E6%9C%89%E7%9B%91%E6%8E%A7%E5%B1%95%E7%A4%BA%E5%A6%82%E4%BD%95%E6%8E%92%E6%9F%A5

官方文档里面说了:

Q: 控制台正确的规则推送后看不到?

客户端成功接入控制台后,控制台配置规则准确无误,但是客户端收不到规则或者报错?比如配置的资源名正确但 sentinel-record.log 日志里面却报 resourceName 为空的错误?

A: 排查客户端是否使用了低版本的 fastjson,低版本的 fastjson 可能会有此问题,建议使用和 Sentinel 相关组件一致版本的 fastjson。

相信你不是第一个,也不是最后一个。

最后祝您学习愉快。

另外,建议以后有问题最好在原贴跟帖哦,我都会看到的。新开帖子不利于我,也不利于别的学员追踪问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕的地6982369 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-06 14:25:45
  • 提问者 慕的地6982369 #2
    大目老师辛苦了,注意身体,身体是革命的本钱。也特别感动你在这种情况下还解答了我的问题。从这个issue中也明白了,官方文档的重要性,这点是我忽略的,当时就一门心思看源码了。受益匪浅,再次感谢。还有给我的建议,以后的问题我会在一个帖子里持续追踪。
    回复 有任何疑惑可以回复我~ 2020-01-06 14:29:26
  • 大目 回复 提问者 慕的地6982369 #3
    谢谢啦兄弟!加油!看好你哦!
    回复 有任何疑惑可以回复我~ 2020-01-06 14:49:10
提问者 慕的地6982369 2020-01-05 00:03:44

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

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

我跟了一下源码,发现在ModifyRulesCommandHandler.java里面如截图的地方,Json对象转换成数组对象的时候竟然给我resource这个属性变成了null。导致了我在sentinel中无法注册流控规则。麻烦老师帮我看看这块是怎么回事呗,谢谢。

1 回复 有任何疑惑可以回复我~
大目 2020-01-05 01:52:17

您好,将代码托管到github或者gitee,并附上复现步骤,我来看看哈。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕的地6982369 #1
    大目老师您好:
        代码已经上传到了码云上(https://gitee.com/morning-feather/springcloudalibabademo.git)。
    
    复现步骤如下: 
        1.导入数据库脚本stamprally_stamp_center.sql和stamprally_user_center.sql
    2.分别启动两个工程(注册到nocas上)
    3.访问http://localhost:8011/customer/1后sentinel中出现user-centre
    4.在簇点链路中添加资源名为(GET:http://stamp-center/stamp/{id})的流控规则后,流控规则中并没有添加成功该资源名的流控规则
    5.分析发现源码中ModifyRulesCommandHandler.class的第66行
    	List<FlowRule> flowRules = JSONArray.parseArray(data, FlowRule.class);
      Json对象(data)转换成数组对象(FlowRule)的时候竟然给我resource这个属性变成了null
    	
    	data:
    		[{"clusterConfig":{"fallbackToLocalWhenFail":true,"sampleCount":10,"strategy":0,"thresholdType":0,"windowIntervalMs":1000},"clusterMode":false,"controlBehavior":0,"count":1.0,"grade":1,"limitApp":"default","maxQueueingTimeMs":500,"resource":"GET:http://stamp-center/stamp/{id}","strategy":0,"warmUpPeriodSec":10}]
    	
    	flowRules:
    		[FlowRule{resource=null, limitApp=default, grade=1, count=1.0, strategy=0, refResource=null, controlBehavior=0, warmUpPeriodSec=10, maxQueueingTimeMs=500, clusterMode=false, clusterConfig=ClusterFlowConfig{flowId=null, thresholdType=0, fallbackToLocalWhenFail=true, strategy=0, sampleCount=10, windowIntervalMs=1000}, controller=null}]
    回复 有任何疑惑可以回复我~ 2020-01-05 11:51:04
大目 2020-01-04 02:17:21

提示成功,但是无效?我也不知道哈。没有遇到过这种问题。

建议看下你的Sentinel Dashboard是否有错误日志哈。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕的地6982369 #1
    老师,我又更新了这个帖子,有时间帮我看一下呗。谢谢
    回复 有任何疑惑可以回复我~ 2020-01-05 00:04:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信