From 72b722a5c15bc0b546edb0a0c5e98f857708dd64 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Wed, 9 Oct 2019 16:25:47 +0800 Subject: [PATCH] Support namespace in Nacos cluster/configuration (#3578) * Support namespace in Nacos cluster/configuration * Give Nacos default namespace as per config/registry --- docker/oap/docker-entrypoint.sh | 13 +++-- docs/en/setup/backend/backend-cluster.md | 2 + docs/en/setup/backend/dynamic-config.md | 2 + .../nacos/ClusterModuleNacosConfig.java | 1 + .../nacos/ClusterModuleNacosProvider.java | 11 ++-- .../nacos/ClusterModuleNacosProviderTest.java | 16 ++++-- .../nacos/NacosConfigWatcherRegister.java | 4 +- .../nacos/NacosServerSettings.java | 54 +++---------------- .../nacos/NacosConfigWatcherRegisterTest.java | 1 + .../src/test/resources/application.yml | 2 + .../src/main/assembly/application.yml | 4 ++ .../src/main/resources/application.yml | 4 ++ 12 files changed, 54 insertions(+), 60 deletions(-) diff --git a/docker/oap/docker-entrypoint.sh b/docker/oap/docker-entrypoint.sh index 5f8fbb0fab..06cca18303 100755 --- a/docker/oap/docker-entrypoint.sh +++ b/docker/oap/docker-entrypoint.sh @@ -77,6 +77,7 @@ generateClusterNacos() { cluster: nacos: serviceName: \${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} + namespace: \${SW_CLUSTER_NACOS_NAMESPACE:""} hostPort: \${SW_CLUSTER_NACOS_HOST_PORT:nacos:8848} EOT } @@ -163,15 +164,17 @@ generateConfigurationNacos() { configuration: nacos: # Nacos Server Host - serverAddr: \${SW_CONFIGURATION_NACO_SERVER_ADDR:naco} + serverAddr: \${SW_CONFIGURATION_NACOS_SERVER_ADDR:nacos} # Nacos Server Port - port: \${SW_CONFIGURATION_NACO_PORT:8848} + port: \${SW_CONFIGURATION_NACOS_PORT:8848} # Nacos Configuration Group - group: \${SW_CONFIGURATION_NACO_GROUP:skywalking} + group: \${SW_CONFIGURATION_NACOS_GROUP:skywalking} + # Nacos Configuration namespace + namespace: \${SW_CONFIGURATION_NACOS_NAMESPACE:""} # Unit seconds, sync period. Default fetch every 60 seconds. - period : \${SW_CONFIGURATION_NACO_PERIOD:5} + period : \${SW_CONFIGURATION_NACOS_PERIOD:5} # the name of current cluster, set the name if you want to upstream system known. - clusterName: \${SW_CONFIGURATION_NACO_CLUSTER_NAME:default} + clusterName: \${SW_CONFIGURATION_NACOS_CLUSTER_NAME:default} EOT } diff --git a/docs/en/setup/backend/backend-cluster.md b/docs/en/setup/backend/backend-cluster.md index 0e7904f542..9a58f56470 100644 --- a/docs/en/setup/backend/backend-cluster.md +++ b/docs/en/setup/backend/backend-cluster.md @@ -106,6 +106,8 @@ cluster: serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} # Nacos cluster nodes, example: 10.0.0.1:8848,10.0.0.2:8848,10.0.0.3:8848 hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848} + # Nacos Configuration namespace + namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"} ``` ## Etcd diff --git a/docs/en/setup/backend/dynamic-config.md b/docs/en/setup/backend/dynamic-config.md index 0ddf1552c4..bdf3f1be94 100755 --- a/docs/en/setup/backend/dynamic-config.md +++ b/docs/en/setup/backend/dynamic-config.md @@ -60,6 +60,8 @@ configuration: port: 8848 # Nacos Configuration Group group: 'skywalking' + # Nacos Configuration namespace + namespace: '' # 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. diff --git a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java index 2b5590d856..d9f0746728 100644 --- a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java +++ b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java @@ -28,4 +28,5 @@ import org.apache.skywalking.oap.server.library.module.ModuleConfig; public class ClusterModuleNacosConfig extends ModuleConfig { @Setter @Getter private String serviceName; @Setter @Getter private String hostPort; + @Setter @Getter private String namespace = "public"; } diff --git a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProvider.java b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProvider.java index 34b3bc37fc..5c4d4f9a47 100644 --- a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProvider.java +++ b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProvider.java @@ -18,7 +18,7 @@ package org.apache.skywalking.oap.server.cluster.plugin.nacos; -import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; import org.apache.skywalking.oap.server.core.CoreModule; @@ -27,6 +27,8 @@ import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery; import org.apache.skywalking.oap.server.core.cluster.ClusterRegister; import org.apache.skywalking.oap.server.library.module.*; +import java.util.Properties; + /** * @author caoyixiong */ @@ -58,8 +60,11 @@ public class ClusterModuleNacosProvider extends ModuleProvider { @Override public void prepare() throws ServiceNotProvidedException, ModuleStartException { try { - namingService = NamingFactory.createNamingService(config.getHostPort()); - } catch (NacosException e) { + Properties properties = new Properties(); + properties.put(PropertyKeyConst.SERVER_ADDR, config.getHostPort()); + properties.put(PropertyKeyConst.NAMESPACE, config.getNamespace()); + namingService = NamingFactory.createNamingService(properties); + } catch (Exception e) { throw new ModuleStartException(e.getMessage(), e); } NacosCoordinator coordinator = new NacosCoordinator(namingService, config); diff --git a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProviderTest.java b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProviderTest.java index b60777b186..a58152ff1c 100644 --- a/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProviderTest.java +++ b/oap-server/server-cluster-plugin/cluster-nacos-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProviderTest.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.cluster.plugin.nacos; +import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; import org.apache.skywalking.oap.server.core.CoreModule; @@ -32,6 +33,9 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; + +import java.util.Properties; + import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -79,13 +83,17 @@ public class ClusterModuleNacosProviderTest { nacosConfig.setServiceName(SERVICE_NAME); Whitebox.setInternalState(provider, "config", nacosConfig); NamingService namingService = mock(NamingService.class); - PowerMockito.when(NamingFactory.createNamingService("10.0.0.1:1000,10.0.0.2:1001")).thenReturn(namingService); + + Properties properties = new Properties(); + properties.put(PropertyKeyConst.SERVER_ADDR, "10.0.0.1:1000,10.0.0.2:1001"); + + PowerMockito.when(NamingFactory.createNamingService(properties)).thenReturn(namingService); provider.prepare(); - ArgumentCaptor addressCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor addressCaptor = ArgumentCaptor.forClass(Properties.class); PowerMockito.verifyStatic(); NamingFactory.createNamingService(addressCaptor.capture()); - String data = addressCaptor.getValue(); - assertEquals("10.0.0.1:1000,10.0.0.2:1001", data); + Properties data = addressCaptor.getValue(); + assertEquals("10.0.0.1:1000,10.0.0.2:1001", data.getProperty(PropertyKeyConst.SERVER_ADDR)); } @Test diff --git a/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegister.java b/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegister.java index 561e974cd0..8c0f010408 100644 --- a/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegister.java +++ b/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegister.java @@ -19,6 +19,7 @@ package org.apache.skywalking.oap.server.configuration.nacos; import com.alibaba.nacos.api.NacosFactory; +import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException; @@ -53,7 +54,8 @@ public class NacosConfigWatcherRegister extends ConfigWatcherRegister { final String serverAddr = this.settings.getServerAddr(); final Properties properties = new Properties(); - properties.put("serverAddr", serverAddr + ":" + port); + properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr + ":" + port); + properties.put(PropertyKeyConst.NAMESPACE, settings.getNamespace()); this.configService = NacosFactory.createConfigService(properties); } diff --git a/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosServerSettings.java b/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosServerSettings.java index 74ab960401..e909a6e5d4 100644 --- a/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosServerSettings.java +++ b/oap-server/server-configuration/configuration-nacos/src/main/java/org/apache/skywalking/oap/server/configuration/nacos/NacosServerSettings.java @@ -18,62 +18,22 @@ package org.apache.skywalking.oap.server.configuration.nacos; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import org.apache.skywalking.oap.server.library.module.ModuleConfig; /** * @author kezhenxu94 */ +@Getter +@Setter +@ToString public class NacosServerSettings extends ModuleConfig { private String clusterName = "default"; + private String namespace = ""; 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() + ")"; - } } diff --git a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java index 897a324879..b6c49bec3d 100644 --- a/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java +++ b/oap-server/server-configuration/configuration-nacos/src/test/java/org/apache/skywalking/oap/server/configuration/nacos/NacosConfigWatcherRegisterTest.java @@ -45,6 +45,7 @@ public class NacosConfigWatcherRegisterTest { final NacosServerSettings mockSettings = mock(NacosServerSettings.class); when(mockSettings.getGroup()).thenReturn(group); + when(mockSettings.getNamespace()).thenReturn(""); final NacosConfigWatcherRegister mockRegister = spy(new NacosConfigWatcherRegister(mockSettings)); final ConfigService mockConfigService = mock(ConfigService.class); diff --git a/oap-server/server-configuration/configuration-nacos/src/test/resources/application.yml b/oap-server/server-configuration/configuration-nacos/src/test/resources/application.yml index 49810f5764..f5bd261acf 100755 --- a/oap-server/server-configuration/configuration-nacos/src/test/resources/application.yml +++ b/oap-server/server-configuration/configuration-nacos/src/test/resources/application.yml @@ -27,6 +27,8 @@ configuration: port: ${nacos.port} # Nacos Configuration Group group: 'skywalking' + # Nacos Configuration namespace + namespace: '' # 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. diff --git a/oap-server/server-starter/src/main/assembly/application.yml b/oap-server/server-starter/src/main/assembly/application.yml index 24971c291e..9741096878 100644 --- a/oap-server/server-starter/src/main/assembly/application.yml +++ b/oap-server/server-starter/src/main/assembly/application.yml @@ -40,6 +40,8 @@ cluster: # nacos: # serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} # hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848} +# # Nacos Configuration namespace +# namespace: 'public' # etcd: # serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} # etcd cluster nodes, example: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379 @@ -152,6 +154,8 @@ configuration: # port: 8848 # # Nacos Configuration Group # group: 'skywalking' +# # Nacos Configuration namespace +# namespace: '' # # 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. diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml index 9ec43e1aa9..b16976cb70 100755 --- a/oap-server/server-starter/src/main/resources/application.yml +++ b/oap-server/server-starter/src/main/resources/application.yml @@ -38,6 +38,8 @@ cluster: # hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500} # nacos: # serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} +# # Nacos Configuration namespace +# namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"} # hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848} # etcd: # serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"} @@ -164,6 +166,8 @@ configuration: # port: 8848 # # Nacos Configuration Group # group: 'skywalking' +# # Nacos Configuration namespace +# namespace: '' # # 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.