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

来源:8-5 流控规则

慕的地6982369

2020-01-04

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

图片描述

图片描述

添加后的流控规则没有显示,也没有生效。但是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回答

大目

2020-01-06

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

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

我按照你的思路都快给官方提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
3
大目
回复
慕的地6982369
谢谢啦兄弟!加油!看好你哦!
2020-01-06
共3条回复

慕的地6982369

提问者

2020-01-05

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

//img.mukewang.com/szimg/5e10b67e092b0bd418350916.jpg

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

1
0

大目

2020-01-05

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

0
1
慕的地6982369
大目老师您好: 代码已经上传到了码云上(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 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
共1条回复

大目

2020-01-04

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

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

0
1
慕的地6982369
老师,我又更新了这个帖子,有时间帮我看一下呗。谢谢
2020-01-05
共1条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3082 学习 · 1323 问题

查看课程