* Provide Nacos dynamic configuration center implementation. fixes #2816 * Add unit tests * Sync * Replace pull-mode with watch-mode * Fix ci * Unify dependency management * Add integration tests * Revert unexpected changes * Add more test cases * Revert unexpected changes * Suppress IDE warning * Correctify volumes position * Add license header * Remove Chinese comments * Sync * Sync * Sync * Sync * Revert unexpected changes * Rebase on refactored code and add missing config to docker * Fix unit test * Revert unnecessary changes
This commit is contained in:
parent
57aedb8017
commit
7f2277091d
|
|
@ -31,9 +31,31 @@ configuration:
|
|||
#clusterName: "default" # the name of current cluster, set the name if you want to upstream system known.
|
||||
```
|
||||
|
||||
## Nacos DCS
|
||||
|
||||
[Nacos](https://github.com/alibaba/nacos) is also supported in DCS, to use it, please configure as follows:
|
||||
|
||||
```yaml
|
||||
configuration:
|
||||
nacos:
|
||||
# Nacos Server Host
|
||||
serverAddr: 127.0.0.1
|
||||
# Nacos Server Port
|
||||
port: 8848
|
||||
# Nacos Configuration Group
|
||||
group: 'skywalking'
|
||||
# Dynamically configured keys
|
||||
dataIds:
|
||||
- receiver-trace.default.slowDBAccessThreshold
|
||||
# - other-key
|
||||
# Unit seconds, sync period. Default fetch every 60 seconds.
|
||||
period : 60
|
||||
# the name of current cluster, set the name if you want to upstream system known.
|
||||
clusterName: "default"
|
||||
```
|
||||
|
||||
## 3rd party Configuration Center
|
||||
We are welcome contributions to implement this module provider to support popular configuration center,
|
||||
such as Zookeeper, etcd, Consul, Nacos. Submit issue to discuss.
|
||||
such as Zookeeper, etcd, Consul. Submit issue to discuss.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@
|
|||
<simpleclient.version>0.6.0</simpleclient.version>
|
||||
|
||||
<maven-docker-plugin.version>0.28.0</maven-docker-plugin.version>
|
||||
<nacos.version>1.0.0</nacos.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
|
@ -359,6 +360,11 @@
|
|||
<artifactId>simpleclient</artifactId>
|
||||
<version>${simpleclient.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-client</artifactId>
|
||||
<version>${nacos.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
|
@ -396,4 +402,4 @@
|
|||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -27,9 +27,7 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>cluster-nacos-plugin</artifactId>
|
||||
<properties>
|
||||
<nacos.version>1.0.0</nacos.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
|
|
@ -39,7 +37,6 @@
|
|||
<dependency>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-client</artifactId>
|
||||
<version>${nacos.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
|
|
@ -68,4 +65,4 @@
|
|||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import lombok.*;
|
|||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
@ToString
|
||||
public class ConfigTable {
|
||||
@Getter
|
||||
private List<ConfigItem> items = new ArrayList<>();
|
||||
|
|
@ -36,6 +37,7 @@ public class ConfigTable {
|
|||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public static class ConfigItem {
|
||||
private String name;
|
||||
private String value;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,142 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
~ contributor license agreements. See the NOTICE file distributed with
|
||||
~ this work for additional information regarding copyright ownership.
|
||||
~ The ASF licenses this file to You 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.
|
||||
~
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>server-configuration</artifactId>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<version>6.2.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>configuration-nacos</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<artifactId>configuration-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<artifactId>library-client</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-client</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.fabric8</groupId>
|
||||
<artifactId>docker-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<sourceMode>all</sourceMode>
|
||||
<showLogs>true</showLogs>
|
||||
<logDate>default</logDate>
|
||||
<verbose>true</verbose>
|
||||
<imagePullPolicy>Always</imagePullPolicy>
|
||||
<autoCreateCustomNetworks>true</autoCreateCustomNetworks>
|
||||
<images>
|
||||
<image>
|
||||
<name>mysql:5.7</name>
|
||||
<alias>nacos-dynamic-configuration-integration-test-mysql</alias>
|
||||
<run>
|
||||
<network>
|
||||
<name>test-network</name>
|
||||
<alias>mysql</alias>
|
||||
</network>
|
||||
<env>
|
||||
<MYSQL_MASTER_SERVICE_HOST>127.0.0.1</MYSQL_MASTER_SERVICE_HOST>
|
||||
<MYSQL_ALLOW_EMPTY_PASSWORD>yes</MYSQL_ALLOW_EMPTY_PASSWORD>
|
||||
</env>
|
||||
<namingStrategy>none</namingStrategy>
|
||||
<ports>
|
||||
<port>3307:3306</port>
|
||||
</ports>
|
||||
<volumes>
|
||||
<bind>
|
||||
<volume>
|
||||
src/test/resources/docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
||||
</volume>
|
||||
</bind>
|
||||
</volumes>
|
||||
<wait>
|
||||
<log>ready for connections</log>
|
||||
<time>30000</time>
|
||||
</wait>
|
||||
</run>
|
||||
</image>
|
||||
<image>
|
||||
<name>nacos/nacos-server:${nacos.version}</name>
|
||||
<alias>nacos-dynamic-configuration-integration-test-nacos</alias>
|
||||
<run>
|
||||
<network>
|
||||
<name>test-network</name>
|
||||
<alias>nacos</alias>
|
||||
</network>
|
||||
<env>
|
||||
<MODE>standalone</MODE>
|
||||
<MYSQL_MASTER_SERVICE_HOST>mysql</MYSQL_MASTER_SERVICE_HOST>
|
||||
<MYSQL_MASTER_SERVICE_DB_NAME>test</MYSQL_MASTER_SERVICE_DB_NAME>
|
||||
<MYSQL_MASTER_SERVICE_PORT>3307</MYSQL_MASTER_SERVICE_PORT>
|
||||
</env>
|
||||
<namingStrategy>none</namingStrategy>
|
||||
<dependsOn>
|
||||
<container>nacos-dynamic-configuration-integration-test-mysql</container>
|
||||
</dependsOn>
|
||||
<links>
|
||||
<link>nacos-dynamic-configuration-integration-test-mysql</link>
|
||||
</links>
|
||||
<ports>
|
||||
<port>8848:8848</port>
|
||||
</ports>
|
||||
<wait>
|
||||
<log>Nacos started successfully</log>
|
||||
<time>60000</time>
|
||||
</wait>
|
||||
</run>
|
||||
</image>
|
||||
</images>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>start</id>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>start</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>stop</id>
|
||||
<phase>post-integration-test</phase>
|
||||
<goals>
|
||||
<goal>stop</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import com.alibaba.nacos.api.NacosFactory;
|
||||
import com.alibaba.nacos.api.config.ConfigService;
|
||||
import com.alibaba.nacos.api.config.listener.Listener;
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigWatcherRegister;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosConfigWatcherRegister extends ConfigWatcherRegister {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigWatcherRegister.class);
|
||||
|
||||
private final NacosServerSettings settings;
|
||||
private final ConfigService configService;
|
||||
private final Map<String, Optional<String>> configItemKeyedByName;
|
||||
private final Map<String, Listener> listenersByKey;
|
||||
|
||||
public NacosConfigWatcherRegister(NacosServerSettings settings) throws NacosException {
|
||||
super(settings.getPeriod());
|
||||
|
||||
this.settings = settings;
|
||||
this.configItemKeyedByName = new ConcurrentHashMap<>();
|
||||
this.listenersByKey = new ConcurrentHashMap<>();
|
||||
|
||||
final int port = this.settings.getPort();
|
||||
final String serverAddr = this.settings.getServerAddr();
|
||||
|
||||
final Properties properties = new Properties();
|
||||
properties.put("serverAddr", serverAddr + ":" + port);
|
||||
this.configService = NacosFactory.createConfigService(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigTable readConfig(Set<String> keys) {
|
||||
removeUninterestedKeys(keys);
|
||||
registerKeyListeners(keys);
|
||||
|
||||
final ConfigTable table = new ConfigTable();
|
||||
|
||||
for (Map.Entry<String, Optional<String>> entry : configItemKeyedByName.entrySet()) {
|
||||
final String key = entry.getKey();
|
||||
final Optional<String> value = entry.getValue();
|
||||
|
||||
if (value.isPresent()) {
|
||||
table.add(new ConfigTable.ConfigItem(key, value.get()));
|
||||
} else {
|
||||
table.add(new ConfigTable.ConfigItem(key, null));
|
||||
}
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
private void registerKeyListeners(final Set<String> keys) {
|
||||
final String group = settings.getGroup();
|
||||
|
||||
for (final String dataId : keys) {
|
||||
if (listenersByKey.containsKey(dataId)) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
listenersByKey.putIfAbsent(dataId, new Listener() {
|
||||
@Override
|
||||
public Executor getExecutor() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void receiveConfigInfo(String configInfo) {
|
||||
onDataIdValueChanged(dataId, configInfo);
|
||||
}
|
||||
});
|
||||
configService.addListener(dataId, group, listenersByKey.get(dataId));
|
||||
|
||||
// the key is newly added, read the config for the first time
|
||||
final String config = configService.getConfig(dataId, group, 1000);
|
||||
onDataIdValueChanged(dataId, config);
|
||||
} catch (NacosException e) {
|
||||
LOGGER.warn("Failed to register Nacos listener for dataId: {}", dataId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeUninterestedKeys(final Set<String> interestedKeys) {
|
||||
final String group = settings.getGroup();
|
||||
|
||||
final Set<String> uninterestedKeys = new HashSet<>(listenersByKey.keySet());
|
||||
uninterestedKeys.removeAll(interestedKeys);
|
||||
|
||||
uninterestedKeys.forEach(k -> {
|
||||
final Listener listener = listenersByKey.remove(k);
|
||||
if (listener != null) {
|
||||
configService.removeListener(k, group, listener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void onDataIdValueChanged(String dataId, String configInfo) {
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info("Nacos config changed: {}: {}", dataId, configInfo);
|
||||
}
|
||||
|
||||
configItemKeyedByName.put(dataId, Optional.ofNullable(configInfo));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import com.google.common.base.Strings;
|
||||
import org.apache.skywalking.oap.server.configuration.api.AbstractConfigurationProvider;
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigWatcherRegister;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleStartException;
|
||||
|
||||
/**
|
||||
* Get configuration from Nacos.
|
||||
*
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosConfigurationProvider extends AbstractConfigurationProvider {
|
||||
private NacosServerSettings settings;
|
||||
|
||||
public NacosConfigurationProvider() {
|
||||
settings = new NacosServerSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return "nacos";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleConfig createConfigBeanIfAbsent() {
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ConfigWatcherRegister initConfigReader() throws ModuleStartException {
|
||||
if (Strings.isNullOrEmpty(settings.getServerAddr())) {
|
||||
throw new ModuleStartException("Nacos serverAddr cannot be null or empty.");
|
||||
}
|
||||
if (settings.getPort() <= 0) {
|
||||
throw new ModuleStartException("Nacos port must be positive integer.");
|
||||
}
|
||||
if (Strings.isNullOrEmpty(settings.getGroup())) {
|
||||
throw new ModuleStartException("Nacos group cannot be null or empty.");
|
||||
}
|
||||
|
||||
try {
|
||||
return new NacosConfigWatcherRegister(settings);
|
||||
} catch (NacosException e) {
|
||||
throw new ModuleStartException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosServerSettings extends ModuleConfig {
|
||||
private String clusterName = "default";
|
||||
private String serverAddr;
|
||||
private int port = 8848;
|
||||
private String group;
|
||||
private int period = 60;
|
||||
|
||||
public String getClusterName() {
|
||||
return clusterName;
|
||||
}
|
||||
|
||||
public void setClusterName(String clusterName) {
|
||||
this.clusterName = clusterName;
|
||||
}
|
||||
|
||||
public String getServerAddr() {
|
||||
return serverAddr;
|
||||
}
|
||||
|
||||
public void setServerAddr(String serverAddr) {
|
||||
this.serverAddr = serverAddr;
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
return port;
|
||||
}
|
||||
|
||||
public void setPort(int port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
public void setGroup(String group) {
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
public int getPeriod() {
|
||||
return period;
|
||||
}
|
||||
|
||||
public void setPeriod(int period) {
|
||||
this.period = period;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "NacosServerSettings(clusterName=" + this.getClusterName()
|
||||
+ ", serverAddr=" + this.getServerAddr()
|
||||
+ ", group=" + this.getGroup()
|
||||
+ ", period=" + this.getPeriod() + ")";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You 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.
|
||||
#
|
||||
#
|
||||
|
||||
org.apache.skywalking.oap.server.configuration.nacos.NacosConfigurationProvider
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import com.alibaba.nacos.api.NacosFactory;
|
||||
import com.alibaba.nacos.api.config.ConfigService;
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import org.apache.skywalking.apm.util.PropertyPlaceholderHelper;
|
||||
import org.apache.skywalking.oap.server.library.module.ApplicationConfiguration;
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleManager;
|
||||
import org.apache.skywalking.oap.server.library.util.CollectionUtils;
|
||||
import org.apache.skywalking.oap.server.library.util.ResourceUtils;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.Reader;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class ITNacosConfigurationTest {
|
||||
private final Yaml yaml = new Yaml();
|
||||
|
||||
private NacosConfigurationTestProvider provider;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
final ApplicationConfiguration applicationConfiguration = new ApplicationConfiguration();
|
||||
loadConfig(applicationConfiguration);
|
||||
|
||||
final ModuleManager moduleManager = new ModuleManager();
|
||||
moduleManager.init(applicationConfiguration);
|
||||
|
||||
provider =
|
||||
(NacosConfigurationTestProvider) moduleManager
|
||||
.find(NacosConfigurationTestModule.NAME)
|
||||
.provider();
|
||||
|
||||
assertNotNull(provider);
|
||||
}
|
||||
|
||||
@SuppressWarnings("StatementWithEmptyBody")
|
||||
@Test(timeout = 10000)
|
||||
public void shouldReadUpdated() throws NacosException {
|
||||
assertNull(provider.watcher.value());
|
||||
|
||||
final Properties properties = new Properties();
|
||||
properties.put("serverAddr", "localhost:8848");
|
||||
final ConfigService configService = NacosFactory.createConfigService(properties);
|
||||
assertTrue(configService.publishConfig("test-module.default.testKey", "skywalking", "500"));
|
||||
|
||||
for (String v = provider.watcher.value(); v == null; v = provider.watcher.value()) {
|
||||
}
|
||||
|
||||
assertEquals("500", provider.watcher.value());
|
||||
|
||||
assertTrue(configService.removeConfig("test-module.default.testKey", "skywalking"));
|
||||
|
||||
for (String v = provider.watcher.value(); v != null; v = provider.watcher.value()) {
|
||||
}
|
||||
|
||||
assertNull(provider.watcher.value());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void loadConfig(ApplicationConfiguration configuration) throws FileNotFoundException {
|
||||
Reader applicationReader = ResourceUtils.read("application.yml");
|
||||
Map<String, Map<String, Map<String, ?>>> moduleConfig = yaml.loadAs(applicationReader, Map.class);
|
||||
if (CollectionUtils.isNotEmpty(moduleConfig)) {
|
||||
moduleConfig.forEach((moduleName, providerConfig) -> {
|
||||
if (providerConfig.size() > 0) {
|
||||
ApplicationConfiguration.ModuleConfiguration moduleConfiguration = configuration.addModule(moduleName);
|
||||
providerConfig.forEach((name, propertiesConfig) -> {
|
||||
Properties properties = new Properties();
|
||||
if (propertiesConfig != null) {
|
||||
propertiesConfig.forEach((key, value) -> {
|
||||
properties.put(key, value);
|
||||
final Object replaceValue = yaml.load(PropertyPlaceholderHelper.INSTANCE
|
||||
.replacePlaceholders(value + "", properties));
|
||||
if (replaceValue != null) {
|
||||
properties.replace(key, replaceValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
moduleConfiguration.addProviderConfiguration(name, properties);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import com.alibaba.nacos.api.config.ConfigService;
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigTable;
|
||||
import org.junit.Test;
|
||||
import org.powermock.reflect.Whitebox;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosConfigWatcherRegisterTest {
|
||||
@Test
|
||||
public void shouldReadConfigs() throws NacosException {
|
||||
final String group = "skywalking";
|
||||
final String testKey1 = "receiver-trace.default.slowDBAccessThreshold";
|
||||
final String testVal1 = "test";
|
||||
final String testKey2 = "testKey";
|
||||
final String testVal2 = "testVal";
|
||||
|
||||
final NacosServerSettings mockSettings = mock(NacosServerSettings.class);
|
||||
when(mockSettings.getGroup()).thenReturn(group);
|
||||
|
||||
final NacosConfigWatcherRegister mockRegister = spy(new NacosConfigWatcherRegister(mockSettings));
|
||||
final ConfigService mockConfigService = mock(ConfigService.class);
|
||||
when(mockConfigService.getConfig(testKey1, group, 1000)).thenReturn(testVal1);
|
||||
when(mockConfigService.getConfig(testKey2, group, 1000)).thenReturn(testVal2);
|
||||
|
||||
Whitebox.setInternalState(mockRegister, "configService", mockConfigService);
|
||||
|
||||
final ConfigTable configTable = mockRegister.readConfig(Sets.newHashSet(testKey1, testKey2));
|
||||
|
||||
assertEquals(2, configTable.getItems().size());
|
||||
Map<String, String> kvs = new HashMap<>();
|
||||
for (ConfigTable.ConfigItem item : configTable.getItems()) {
|
||||
kvs.put(item.getName(), item.getValue());
|
||||
}
|
||||
assertEquals(testVal1, kvs.get(testKey1));
|
||||
assertEquals(testVal2, kvs.get(testKey2));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import org.apache.skywalking.oap.server.library.module.ModuleDefine;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosConfigurationTestModule extends ModuleDefine {
|
||||
public static final String NAME = "test-module";
|
||||
|
||||
public NacosConfigurationTestModule() {
|
||||
super(NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class[] services() {
|
||||
return new Class[0];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 org.apache.skywalking.oap.server.configuration.nacos;
|
||||
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
|
||||
import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
|
||||
import org.apache.skywalking.oap.server.configuration.api.DynamicConfigurationService;
|
||||
import org.apache.skywalking.oap.server.library.module.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author kezhenxu94
|
||||
*/
|
||||
public class NacosConfigurationTestProvider extends ModuleProvider {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigurationProvider.class);
|
||||
|
||||
ConfigChangeWatcher watcher;
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return "default";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends ModuleDefine> module() {
|
||||
return NacosConfigurationTestModule.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleConfig createConfigBeanIfAbsent() {
|
||||
return new ModuleConfig() {
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepare() throws ServiceNotProvidedException, ModuleStartException {
|
||||
watcher = new ConfigChangeWatcher(NacosConfigurationTestModule.NAME, this, "testKey") {
|
||||
private volatile String testValue;
|
||||
|
||||
@Override
|
||||
public void notify(ConfigChangeWatcher.ConfigChangeEvent value) {
|
||||
LOGGER.info("ConfigChangeWatcher.ConfigChangeEvent: {}", value);
|
||||
if (EventType.DELETE.equals(value.getEventType())) {
|
||||
testValue = null;
|
||||
} else {
|
||||
testValue = value.getNewValue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String value() {
|
||||
return testValue;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() throws ServiceNotProvidedException, ModuleStartException {
|
||||
getManager().find(ConfigurationModule.NAME)
|
||||
.provider()
|
||||
.getService(DynamicConfigurationService.class)
|
||||
.registerConfigChangeWatcher(watcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] requiredModules() {
|
||||
return new String[] {
|
||||
ConfigurationModule.NAME
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You 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.
|
||||
#
|
||||
#
|
||||
|
||||
org.apache.skywalking.oap.server.configuration.api.ConfigurationModule
|
||||
org.apache.skywalking.oap.server.configuration.nacos.NacosConfigurationTestModule
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You 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.
|
||||
#
|
||||
#
|
||||
|
||||
org.apache.skywalking.oap.server.configuration.nacos.NacosConfigurationTestProvider
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you 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.
|
||||
|
||||
test-module:
|
||||
default:
|
||||
testKey: 300
|
||||
|
||||
|
||||
configuration:
|
||||
nacos:
|
||||
# Nacos Server Host
|
||||
serverAddr: localhost
|
||||
# Nacos Server Port
|
||||
port: 8848
|
||||
# Nacos Configuration Group
|
||||
group: 'skywalking'
|
||||
# Dynamically configured keys
|
||||
dataIds:
|
||||
- test-module.default.testKey
|
||||
# - other-key
|
||||
# Unit seconds, sync period. Default fetch every 60 seconds.
|
||||
period: 1
|
||||
# the name of current cluster, set the name if you want to upstream system known.
|
||||
clusterName: "default"
|
||||
|
|
@ -0,0 +1,213 @@
|
|||
--
|
||||
-- Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
-- contributor license agreements. See the NOTICE file distributed with
|
||||
-- this work for additional information regarding copyright ownership.
|
||||
-- The ASF licenses this file to You 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.
|
||||
--
|
||||
|
||||
CREATE DATABASE test DEFAULT CHARACTER SET = 'utf8';
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table_name = config_info */
|
||||
/******************************************/
|
||||
CREATE TABLE `config_info` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(255) DEFAULT NULL,
|
||||
`content` longtext NOT NULL,
|
||||
`md5` varchar(32) DEFAULT NULL,
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`src_user` text,
|
||||
`src_ip` varchar(20) DEFAULT NULL,
|
||||
`app_name` varchar(128) DEFAULT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
`c_desc` varchar(256) DEFAULT NULL,
|
||||
`c_use` varchar(64) DEFAULT NULL,
|
||||
`effect` varchar(64) DEFAULT NULL,
|
||||
`type` varchar(64) DEFAULT NULL,
|
||||
`c_schema` text,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = config_info_aggr */
|
||||
/******************************************/
|
||||
CREATE TABLE `config_info_aggr` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(255) NOT NULL,
|
||||
`datum_id` varchar(255) NOT NULL,
|
||||
`content` longtext NOT NULL,
|
||||
`gmt_modified` datetime NOT NULL,
|
||||
`app_name` varchar(128) DEFAULT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = config_info_beta */
|
||||
/******************************************/
|
||||
CREATE TABLE `config_info_beta` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(128) NOT NULL,
|
||||
`app_name` varchar(128) DEFAULT NULL,
|
||||
`content` longtext NOT NULL,
|
||||
`beta_ips` varchar(1024) DEFAULT NULL,
|
||||
`md5` varchar(32) DEFAULT NULL,
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`src_user` text,
|
||||
`src_ip` varchar(20) DEFAULT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = config_info_tag */
|
||||
/******************************************/
|
||||
CREATE TABLE `config_info_tag` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(128) NOT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
`tag_id` varchar(128) NOT NULL,
|
||||
`app_name` varchar(128) DEFAULT NULL,
|
||||
`content` longtext NOT NULL,
|
||||
`md5` varchar(32) DEFAULT NULL,
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`src_user` text,
|
||||
`src_ip` varchar(20) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = config_tags_relation */
|
||||
/******************************************/
|
||||
CREATE TABLE `config_tags_relation` (
|
||||
`id` bigint(20) NOT NULL,
|
||||
`tag_name` varchar(128) NOT NULL,
|
||||
`tag_type` varchar(64) DEFAULT NULL,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(128) NOT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
`nid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`nid`),
|
||||
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = group_capacity */
|
||||
/******************************************/
|
||||
CREATE TABLE `group_capacity` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`group_id` varchar(128) NOT NULL DEFAULT '',
|
||||
`quota` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`usage` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_size` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_group_id` (`group_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = his_config_info */
|
||||
/******************************************/
|
||||
CREATE TABLE `his_config_info` (
|
||||
`id` bigint(64) unsigned NOT NULL,
|
||||
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`data_id` varchar(255) NOT NULL,
|
||||
`group_id` varchar(128) NOT NULL,
|
||||
`app_name` varchar(128) DEFAULT NULL,
|
||||
`content` longtext NOT NULL,
|
||||
`md5` varchar(32) DEFAULT NULL,
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`src_user` text,
|
||||
`src_ip` varchar(20) DEFAULT NULL,
|
||||
`op_type` char(10) DEFAULT NULL,
|
||||
`tenant_id` varchar(128) DEFAULT '',
|
||||
PRIMARY KEY (`nid`),
|
||||
KEY `idx_gmt_create` (`gmt_create`),
|
||||
KEY `idx_gmt_modified` (`gmt_modified`),
|
||||
KEY `idx_did` (`data_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
/******************************************/
|
||||
/* database name = nacos_config */
|
||||
/* table name = tenant_capacity */
|
||||
/******************************************/
|
||||
CREATE TABLE `tenant_capacity` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`tenant_id` varchar(128) NOT NULL DEFAULT '',
|
||||
`quota` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`usage` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_size` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
`gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
|
||||
CREATE TABLE `tenant_info` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`kp` varchar(128) NOT NULL,
|
||||
`tenant_id` varchar(128) default '',
|
||||
`tenant_name` varchar(128) default '',
|
||||
`tenant_desc` varchar(256) DEFAULT NULL,
|
||||
`create_source` varchar(32) DEFAULT NULL,
|
||||
`gmt_create` bigint(20) NOT NULL,
|
||||
`gmt_modified` bigint(20) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
|
||||
CREATE TABLE users (
|
||||
username varchar(50) NOT NULL PRIMARY KEY,
|
||||
password varchar(500) NOT NULL,
|
||||
enabled boolean NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE roles (
|
||||
username varchar(50) NOT NULL,
|
||||
role varchar(50) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
|
||||
|
||||
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
<modules>
|
||||
<module>configuration-api</module>
|
||||
<module>grpc-configuration-sync</module>
|
||||
<module>configuration-nacos</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -178,6 +178,11 @@
|
|||
<artifactId>grpc-configuration-sync</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.skywalking</groupId>
|
||||
<artifactId>configuration-nacos</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>skywalking-oap</finalName>
|
||||
|
|
|
|||
|
|
@ -125,6 +125,17 @@ telemetry:
|
|||
none:
|
||||
configuration:
|
||||
none:
|
||||
# nacos:
|
||||
# # Nacos Server Host
|
||||
# serverAddr: 127.0.0.1
|
||||
# # Nacos Server Port
|
||||
# port: 8848
|
||||
# # Nacos Configuration Group
|
||||
# group: 'skywalking'
|
||||
# # Unit seconds, sync period. Default fetch every 60 seconds.
|
||||
# period : 60
|
||||
# # the name of current cluster, set the name if you want to upstream system known.
|
||||
# clusterName: "default"
|
||||
#exporter:
|
||||
# grpc:
|
||||
# targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,18 @@ telemetry:
|
|||
port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
|
||||
configuration:
|
||||
none:
|
||||
# nacos:
|
||||
# # Nacos Server Host
|
||||
# serverAddr: 127.0.0.1
|
||||
# # Nacos Server Port
|
||||
# port: 8848
|
||||
# # Nacos Configuration Group
|
||||
# group: 'skywalking'
|
||||
# # Unit seconds, sync period. Default fetch every 60 seconds.
|
||||
# period : 5
|
||||
# # the name of current cluster, set the name if you want to upstream system known.
|
||||
# clusterName: "default"
|
||||
|
||||
#exporter:
|
||||
# grpc:
|
||||
# targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
|
||||
|
|
|
|||
Loading…
Reference in New Issue