ソースを参照

nacos持久化

master
wangjx 3年前
コミット
8f758ceec7
4個のファイルの変更179行の追加0行の削除
  1. +1
    -0
      sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/common/NacosConstants.java
  2. +56
    -0
      sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/NacosDegradePropertiesConfiguration.java
  3. +62
    -0
      sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/DegradeRuleNacosProvider.java
  4. +60
    -0
      sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/DegradeRuleNacosPublisher.java

+ 1
- 0
sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/common/NacosConstants.java ファイルの表示

@@ -8,5 +8,6 @@ package com.alibaba.csp.sentinel.dashboard.common;
**/
public class NacosConstants {
public static final String DATA_ID_POSTFIX="-sentinel-flow";
public static final String DATA_ID_DEGRADE_POSTFIX="-sentinel-degrade";
public static final String GROUP_ID="DEFAULT_GROUP";
}

+ 56
- 0
sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/config/NacosDegradePropertiesConfiguration.java ファイルの表示

@@ -0,0 +1,56 @@
/*
* 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.config;

import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.DegradeRuleEntity;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosProperties;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Properties;

@Configuration
@EnableConfigurationProperties(NacosProperties.class)
public class NacosDegradePropertiesConfiguration {

@Bean
public Converter<List<DegradeRuleEntity>, String> degradeRuleEntityEncoder() {
return JSON::toJSONString;
}

@Bean
public Converter<String,List<DegradeRuleEntity>> degradeRuleEntityDecoder() {
return s -> JSON.parseArray(s, DegradeRuleEntity.class);
}

@Bean
public ConfigService nacosDegradeConfiguration(NacosProperties nacosProperties) throws NacosException {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR,nacosProperties.getServerAddr());
properties.put(PropertyKeyConst.NAMESPACE,nacosProperties.getNamespace());
return ConfigFactory.createConfigService(properties);
}

}

+ 62
- 0
sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/DegradeRuleNacosProvider.java ファイルの表示

@@ -0,0 +1,62 @@
/*
* 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;

import com.alibaba.csp.sentinel.dashboard.common.NacosConstants;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.DegradeRuleEntity;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.dashboard.rule.DynamicRuleProvider;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.nacos.api.config.ConfigService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
* @author Eric Zhao
*/
@Service
public class DegradeRuleNacosProvider implements DynamicRuleProvider<List<DegradeRuleEntity>> {

@Autowired
private static Logger logger = LoggerFactory.getLogger(DegradeRuleNacosProvider.class);
@Autowired
@Qualifier("nacosDegradeConfiguration")
private ConfigService nacosDegradeConfiguration;
@Autowired
private NacosProperties nacosProperties;
@Autowired
private Converter<String, List<DegradeRuleEntity>> converter;

@Override
public List<DegradeRuleEntity> getRules(String appName) throws Exception {
logger.info("DegradeRuleNacosProvider getRules [appName] " + appName);
String dataId=new StringBuilder(appName).append(NacosConstants.DATA_ID_DEGRADE_POSTFIX).toString();
String rules = nacosDegradeConfiguration.getConfig(dataId,nacosProperties.getGroupId(),3000);
//log.info("pull FlowRule from nacos Config:"+rules);
if (StringUtils.isEmpty(rules)) {
return new ArrayList<>();
} else {
return converter.convert(rules);
}
}
}

+ 60
- 0
sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/DegradeRuleNacosPublisher.java ファイルの表示

@@ -0,0 +1,60 @@
/*
* 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;

import com.alibaba.csp.sentinel.dashboard.common.NacosConstants;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.DegradeRuleEntity;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.dashboard.rule.DynamicRulePublisher;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.csp.sentinel.util.AssertUtil;
import com.alibaba.nacos.api.config.ConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author Eric Zhao
*/
@Service
public class DegradeRuleNacosPublisher implements DynamicRulePublisher<List<DegradeRuleEntity>> {

@Autowired
private static Logger logger = LoggerFactory.getLogger(DegradeRuleNacosPublisher.class);
@Autowired
@Qualifier("nacosDegradeConfiguration")
private ConfigService nacosDegradeConfiguration;
@Autowired
private NacosProperties nacosProperties;
@Autowired
private Converter<List<DegradeRuleEntity>,String> converter;

@Override
public void publish(String appName, List<DegradeRuleEntity> rules) throws Exception {

logger.info("DegradeRuleNacosPublisher publish [appName] " + appName);
AssertUtil.notEmpty(appName, "appName不能为空");
if(rules == null) {
return;
}
String dataId=new StringBuilder(appName).append(NacosConstants.DATA_ID_DEGRADE_POSTFIX).toString();
nacosDegradeConfiguration.publishConfig(dataId,nacosProperties.getGroupId(),converter.convert(rules));
}
}

読み込み中…
キャンセル
保存