一、起因
在本人进行nacos配置sentinel流控配置时发现在nacos种写好相应的json配置仍然无法使用。nacos里面配置:
[
{
"resource": "/test",
"limitApp":"default",
"grade":1,
"count":1,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}
]
二、 原因和解决方法
- 在使用nacos作为持久化配置时先引入依赖。
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>x.y.z</version> //版本可以选择当前springcloud自带的版本,可以省略
</dependency>
- 官方文档是通过在application.properties中进行配置动态数据源
spring.cloud.sentinel.datasource.ds1.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds1.nacos.data-id=sentinel
spring.cloud.sentinel.datasource.ds1.nacos.group-id=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds1.nacos.data-type=json
spring.cloud.sentinel.datasource.ds1.nacos.rule-type=flow
这是官方给出的配置,但是在高版本的nacos中,不管是进行discover还是config配置都是需要配置username和password的,从源码中可以看出
除了基本的serverAddr和dataId等其中还有username和password,这是在高版本的nacos中才有,最下面四个参数和阿里云商业化有关,忽略。
因此我们除了需要上面的那些配置还需要再加入username和password的值,例如:
datasource:
flow: //这个地方名字可以随意填写,就像上面的ds1是可以自己随便取的
nacos:
serverAddr: 127.0.0.1:8848
username: nacos
password: nacos
dataId: test
group-id: DEFAULT_GROUP
dataType: json
ruleType: flow
当然,在springcloud的github上还有个配置但无法使用的问题
issue里面说是JDK版本问题,未遇见,提个醒,至此问题解决。