-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Fix #2546 * Change the stackdepth type * Fix bug * Fix CI failed * fix #2599 * fix ci * add license * add ActiveTag error methods * fix * fix * nacos * nacos * nacos * nacos * fix ci * support nacos cluster * fix yml * fix license * fix ci * remove optional * update license * update license and doc * fix
- Loading branch information
1 parent
b4ee1f1
commit 91ffae2
Showing
17 changed files
with
636 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
Copyright 1999-2019 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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
71 changes: 71 additions & 0 deletions
71
oap-server/server-cluster-plugin/cluster-nacos-plugin/pom.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
<?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-cluster-plugin</artifactId> | ||
<groupId>org.apache.skywalking</groupId> | ||
<version>6.2.0-SNAPSHOT</version> | ||
</parent> | ||
<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> | ||
<artifactId>server-core</artifactId> | ||
<version>${project.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.alibaba.nacos</groupId> | ||
<artifactId>nacos-client</artifactId> | ||
<version>${nacos.version}</version> | ||
<exclusions> | ||
<exclusion> | ||
<groupId>org.slf4j</groupId> | ||
<artifactId>slf4j-api</artifactId> | ||
</exclusion> | ||
<exclusion> | ||
<groupId>org.apache.logging.log4j</groupId> | ||
<artifactId>log4j-core</artifactId> | ||
</exclusion> | ||
<exclusion> | ||
<groupId>org.apache.logging.log4j</groupId> | ||
<artifactId>log4j-slf4j-impl</artifactId> | ||
</exclusion> | ||
<exclusion> | ||
<groupId>ch.qos.logback</groupId> | ||
<artifactId>logback-classic</artifactId> | ||
</exclusion> | ||
<exclusion> | ||
<groupId>ch.qos.logback</groupId> | ||
<artifactId>logback-core</artifactId> | ||
</exclusion> | ||
<exclusion> | ||
<groupId>net.jcip</groupId> | ||
<artifactId>jcip-annotations</artifactId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
</dependencies> | ||
</project> |
31 changes: 31 additions & 0 deletions
31
.../java/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/* | ||
* 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.cluster.plugin.nacos; | ||
|
||
import lombok.Getter; | ||
import lombok.Setter; | ||
import org.apache.skywalking.oap.server.library.module.ModuleConfig; | ||
|
||
/** | ||
* @author caoyixiong | ||
*/ | ||
public class ClusterModuleNacosConfig extends ModuleConfig { | ||
@Setter @Getter private String serviceName; | ||
@Setter @Getter private String hostPort; | ||
} |
84 changes: 84 additions & 0 deletions
84
...ava/org/apache/skywalking/oap/server/cluster/plugin/nacos/ClusterModuleNacosProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
/* | ||
* 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.cluster.plugin.nacos; | ||
|
||
import com.alibaba.nacos.api.exception.NacosException; | ||
import com.alibaba.nacos.api.naming.NamingFactory; | ||
import com.alibaba.nacos.api.naming.NamingService; | ||
import org.apache.skywalking.oap.server.core.CoreModule; | ||
import org.apache.skywalking.oap.server.core.cluster.ClusterModule; | ||
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.*; | ||
|
||
/** | ||
* @author caoyixiong | ||
*/ | ||
public class ClusterModuleNacosProvider extends ModuleProvider { | ||
|
||
private final ClusterModuleNacosConfig config; | ||
private NamingService namingService; | ||
|
||
public ClusterModuleNacosProvider() { | ||
super(); | ||
this.config = new ClusterModuleNacosConfig(); | ||
} | ||
|
||
@Override | ||
public String name() { | ||
return "nacos"; | ||
} | ||
|
||
@Override | ||
public Class<? extends ModuleDefine> module() { | ||
return ClusterModule.class; | ||
} | ||
|
||
@Override | ||
public ModuleConfig createConfigBeanIfAbsent() { | ||
return config; | ||
} | ||
|
||
@Override | ||
public void prepare() throws ServiceNotProvidedException, ModuleStartException { | ||
try { | ||
namingService = NamingFactory.createNamingService(config.getHostPort()); | ||
} catch (NacosException e) { | ||
throw new ModuleStartException(e.getMessage(), e); | ||
} | ||
NacosCoordinator coordinator = new NacosCoordinator(namingService, config); | ||
this.registerServiceImplementation(ClusterRegister.class, coordinator); | ||
this.registerServiceImplementation(ClusterNodesQuery.class, coordinator); | ||
} | ||
|
||
@Override | ||
public void start() throws ServiceNotProvidedException { | ||
|
||
} | ||
|
||
@Override | ||
public void notifyAfterCompleted() throws ServiceNotProvidedException { | ||
|
||
} | ||
|
||
@Override | ||
public String[] requiredModules() { | ||
return new String[]{CoreModule.NAME}; | ||
} | ||
} |
79 changes: 79 additions & 0 deletions
79
...src/main/java/org/apache/skywalking/oap/server/cluster/plugin/nacos/NacosCoordinator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.cluster.plugin.nacos; | ||
|
||
import com.alibaba.nacos.api.exception.NacosException; | ||
import com.alibaba.nacos.api.naming.NamingService; | ||
import com.alibaba.nacos.api.naming.pojo.Instance; | ||
import org.apache.skywalking.oap.server.core.cluster.*; | ||
import org.apache.skywalking.oap.server.core.remote.client.Address; | ||
import org.apache.skywalking.oap.server.library.util.CollectionUtils; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Objects; | ||
|
||
/** | ||
* @author caoyixiong | ||
*/ | ||
public class NacosCoordinator implements ClusterRegister, ClusterNodesQuery { | ||
|
||
private final NamingService namingService; | ||
private final ClusterModuleNacosConfig config; | ||
private volatile Address selfAddress; | ||
|
||
public NacosCoordinator(NamingService namingService, ClusterModuleNacosConfig config) { | ||
this.namingService = namingService; | ||
this.config = config; | ||
} | ||
|
||
@Override | ||
public List<RemoteInstance> queryRemoteNodes() { | ||
List<RemoteInstance> result = new ArrayList<>(); | ||
try { | ||
List<Instance> instances = namingService.selectInstances(config.getServiceName(), true); | ||
if (CollectionUtils.isNotEmpty(instances)) { | ||
instances.forEach(instance -> { | ||
if (Objects.nonNull(selfAddress)) { | ||
if (selfAddress.getHost().equals(instance.getIp()) && selfAddress.getPort() == instance.getPort()) { | ||
result.add(new RemoteInstance(new Address(instance.getIp(), instance.getPort(), true))); | ||
} else { | ||
result.add(new RemoteInstance(new Address(instance.getIp(), instance.getPort(), false))); | ||
} | ||
} | ||
}); | ||
} | ||
} catch (NacosException e) { | ||
throw new ServiceQueryException(e.getErrMsg()); | ||
} | ||
return result; | ||
} | ||
|
||
@Override | ||
public void registerRemote(RemoteInstance remoteInstance) throws ServiceRegisterException { | ||
String host = remoteInstance.getAddress().getHost(); | ||
int port = remoteInstance.getAddress().getPort(); | ||
try { | ||
namingService.registerInstance(config.getServiceName(), host, port); | ||
} catch (Exception e) { | ||
throw new ServiceRegisterException(e.getMessage()); | ||
} | ||
this.selfAddress = remoteInstance.getAddress(); | ||
} | ||
} |
Oops, something went wrong.