商城网站设计说明书,微信网站建设费记什么科目,成立网站要什么手续,网站建设要代码有什么好处官方参考文档#xff1a;
动态规则扩展 alibaba/Sentinel Wiki GitHub
需要修改的代码如下#xff1a; 为了便于后续版本集成nacos#xff0c;简单讲一下集成思路
1.更改pom
修改sentinel-datasource-nacos的范围
将 dependencygroupIdcom.alibaba.c…官方参考文档
动态规则扩展 · alibaba/Sentinel Wiki · GitHub
需要修改的代码如下 为了便于后续版本集成nacos简单讲一下集成思路
1.更改pom
修改sentinel-datasource-nacos的范围
将 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactIdscopetest/scope
/dependency
改为 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId!--scopetest/scope--
/dependency
2.拷贝示例
将test目录下的com.alibaba.csp.sentinel.dashboard.rule.nacos包下的内容拷贝到src的 com.alibaba.csp.sentinel.dashboard.rule的目录
test目录只包含限流其他规则参照创建即可。
创建时注意修改常量并且在NacosConfig实现各种converter
注意授权规则和热点规则需要特殊处理否则nacos配置不生效。
因为授权规则Entity比流控规则Entity多包了一层。
public class FlowRuleEntity implements RuleEntity
public class AuthorityRuleEntity extends AbstractRuleEntityAuthorityRule
以授权规则为例
AuthorityRuleNacosProvider.java
/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the License);* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.alibaba.csp.sentinel.dashboard.rule.nacos.authority;import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.AuthorityRuleEntity;
import com.alibaba.csp.sentinel.dashboard.rule.DynamicRuleProvider;
import com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfigUtil;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;/*** author Eric Zhao* since 1.4.0*/
Component(authorityRuleNacosProvider)
public class AuthorityRuleNacosProvider implements DynamicRuleProviderListAuthorityRuleEntity {Autowiredprivate ConfigService configService;Autowiredprivate ConverterString, ListAuthorityRuleEntity converter;Overridepublic ListAuthorityRuleEntity getRules(String appName) throws Exception {String rules configService.getConfig(appName NacosConfigUtil.AUTHORITY_DATA_ID_POSTFIX,NacosConfigUtil.GROUP_ID, 3000);if (StringUtil.isEmpty(rules)) {return new ArrayList();}return converter.convert(this.parseRules(rules));}private String parseRules(String rules) {JSONArray newRuleJsons new JSONArray();JSONArray ruleJsons JSONArray.parseArray(rules);for (int i 0; i ruleJsons.size(); i) {JSONObject ruleJson ruleJsons.getJSONObject(i);AuthorityRuleEntity ruleEntity JSON.parseObject(ruleJson.toJSONString(), AuthorityRuleEntity.class);JSONObject newRuleJson JSON.parseObject(JSON.toJSONString(ruleEntity));AuthorityRule rule JSON.parseObject(ruleJson.toJSONString(), AuthorityRule.class);newRuleJson.put(rule, rule);newRuleJsons.add(newRuleJson);}return newRuleJsons.toJSONString();}
}
AuthorityRuleNacosPublisher.java
/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the License);* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.alibaba.csp.sentinel.dashboard.rule.nacos.authority;import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.AuthorityRuleEntity;
import com.alibaba.csp.sentinel.dashboard.rule.DynamicRulePublisher;
import com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfigUtil;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.csp.sentinel.util.AssertUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;/*** author Eric Zhao* since 1.4.0*/
Component(authorityRuleNacosPublisher)
public class AuthorityRuleNacosPublisher implements DynamicRulePublisherListAuthorityRuleEntity {Autowiredprivate ConfigService configService;Autowiredprivate ConverterListAuthorityRuleEntity, String converter;Overridepublic void publish(String app, ListAuthorityRuleEntity rules) throws Exception {AssertUtil.notEmpty(app, app name cannot be empty);if (rules null) {return;}configService.publishConfig(app NacosConfigUtil.AUTHORITY_DATA_ID_POSTFIX,NacosConfigUtil.GROUP_ID, this.parseRules(converter.convert(rules)));}private String parseRules(String rules) {JSONArray oldRuleJsons JSONArray.parseArray(rules);for (int i 0; i oldRuleJsons.size(); i) {JSONObject oldRuleJson oldRuleJsons.getJSONObject(i);JSONObject ruleJson oldRuleJson.getJSONObject(rule);oldRuleJson.putAll(ruleJson);oldRuleJson.remove(rule);}return oldRuleJsons.toJSONString();}
}
热点规则同理
3.修改controller
v2目录的FlowControllerV2
将 AutowiredQualifier(flowRuleDefaultProvider)private DynamicRuleProviderListFlowRuleEntity ruleProvider;AutowiredQualifier(flowRuleDefaultPublisher)private DynamicRulePublisherListFlowRuleEntity rulePublisher;
改为 AutowiredQualifier(flowRuleNacosProvider)private DynamicRuleProviderListFlowRuleEntity ruleProvider;AutowiredQualifier(flowRuleNacosPublisher)private DynamicRulePublisherListFlowRuleEntity rulePublisher;
controller目录的其他controller包括
AuthorityRuleController DegradeController FlowControllerV1 ParamFlowRuleController SystemController
做如下更改(以DegradeController为例)
将
Autowiredprivate SentinelApiClient sentinelApiClient;
改成
AutowiredQualifier(degradeRuleNacosProvider)private DynamicRuleProviderListDegradeRuleEntity ruleProvider;AutowiredQualifier(degradeRuleNacosPublisher)private DynamicRulePublisherListDegradeRuleEntity rulePublisher;
将原有publishRules方法删除统一改成 private void publishRules(/*NonNull*/ String app) throws Exception {ListDegradeRuleEntity rules repository.findAllByApp(app);rulePublisher.publish(app, rules);}
之后解决报错的地方即可。
获取所有rules的地方
将 ListDegradeRuleEntity rules sentinelApiClient.fetchDegradeRuleOfMachine(app, ip, port);
改成
ListDegradeRuleEntity rules ruleProvider.getRules(app);
原有调用publishRules方法的地方删除掉
在上一个try catch方法里加上
publishRules(entity.getApp());
这里的entity.getApp()也有可能是oldEntity.getApp()/app等变量。根据删除的publishRules代码片段推测即可。
4.修改前端文件
文件路径:src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html
将 a ui-srefdashboard.flowV1({app: entry.app})
改成 a ui-srefdashboard.flow({app: entry.app})
5.最后打包即可
执行命令打包成jar
mvn clean package
运行方法与官方jar一致不做赘述 6.微服务程序集成
pom.xml添加 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId/dependency
配置文件application.yml添加
spring:cloud:sentinel:datasource:# 名称随意flow:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-flow-rulesgroupId: SENTINEL_GROUP# 规则类型取值见# org.springframework.cloud.alibaba.sentinel.datasource.RuleTyperule-type: flowdegrade:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-degrade-rulesgroupId: SENTINEL_GROUPrule-type: degradesystem:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-system-rulesgroupId: SENTINEL_GROUPrule-type: systemauthority:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-authority-rulesgroupId: SENTINEL_GROUPrule-type: authorityparam-flow:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-param-flow-rulesgroupId: SENTINEL_GROUPrule-type: param-flow
7.测试验证
在sentinel控制台界面添加几个流控规则后尝试关闭微服务和sentinel然后重新打开sentinel和微服务看流控规则是否还在。
8.最后把配置好的代码发给大家大家可以自行下载里边有运行访问流程
https://download.csdn.net/download/qq_34091529/88482757