Skip to content

Commit 9cae26c

Browse files
committed
实现nacos插件
优化starter-gray-server spring.factories
1 parent 807fb69 commit 9cae26c

File tree

4 files changed

+79
-4
lines changed

4 files changed

+79
-4
lines changed

pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@
169169
<version>${project.version}</version>
170170
</dependency>
171171

172+
<dependency>
173+
<groupId>cn.springcloud.gray</groupId>
174+
<artifactId>spring-cloud-gray-plugin-ribbon-nacos-discovery</artifactId>
175+
<version>${project.version}</version>
176+
</dependency>w1`
177+
172178
<dependency>
173179
<groupId>cn.springcloud.gray</groupId>
174180
<artifactId>spring-cloud-gray-plugin-feign</artifactId>
@@ -204,6 +210,11 @@
204210
<version>${project.version}</version>
205211
</dependency>
206212

213+
<dependency>
214+
<groupId>cn.springcloud.gray</groupId>
215+
<artifactId>spring-cloud-gray-server-plugin-nacos-discovery</artifactId>
216+
<version>${project.version}</version>
217+
</dependency>
207218
<!-- gray server plugins end -->
208219

209220

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package cn.springcloud.gray.client.plugin.ribbon.nacos;
2+
3+
import cn.springcloud.gray.servernode.ServerExplainer;
4+
import cn.springcloud.gray.servernode.ServerSpec;
5+
import com.netflix.loadbalancer.Server;
6+
import org.apache.commons.lang3.StringUtils;
7+
import org.springframework.cloud.netflix.ribbon.DefaultServerIntrospector;
8+
import org.springframework.cloud.netflix.ribbon.ServerIntrospector;
9+
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
10+
11+
import java.util.Map;
12+
13+
public class NacosServerExplainer implements ServerExplainer<Server> {
14+
15+
private SpringClientFactory springClientFactory;
16+
17+
public NacosServerExplainer(SpringClientFactory springClientFactory) {
18+
this.springClientFactory = springClientFactory;
19+
}
20+
21+
@Override
22+
public ServerSpec apply(Server server) {
23+
String appName = server.getMetaInfo().getAppName();
24+
String seviceId = appName;
25+
if(StringUtils.contains(appName, "@@")){
26+
seviceId = StringUtils.split(appName, "@@")[1];
27+
}
28+
Map metadata = getServerMetadata(seviceId, server);
29+
return ServerSpec.builder().instanceId(server.getMetaInfo().getInstanceId())
30+
.serviceId(seviceId)
31+
.metadatas(metadata).build();
32+
}
33+
34+
public ServerIntrospector serverIntrospector(String serviceId) {
35+
if (springClientFactory == null) {
36+
return new DefaultServerIntrospector();
37+
}
38+
ServerIntrospector serverIntrospector = this.springClientFactory.getInstance(serviceId,
39+
ServerIntrospector.class);
40+
if (serverIntrospector == null) {
41+
serverIntrospector = new DefaultServerIntrospector();
42+
}
43+
return serverIntrospector;
44+
}
45+
46+
/**
47+
* 获取实例的metadata信息
48+
*
49+
* @param serviceId 服务id
50+
* @param server ribbon服务器(服务实例)
51+
* @return 服务实例的metadata信息
52+
*/
53+
public Map<String, String> getServerMetadata(String serviceId, Server server) {
54+
return serverIntrospector(serviceId).getMetadata(server);
55+
}
56+
}

spring-cloud-gray-plugins/spring-cloud-gray-plugin-ribbon-nacos-discovery/src/main/java/cn/springcloud/gray/client/plugin/ribbon/nacos/configuration/GrayClientRibbonNacosAutoConfiguration.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package cn.springcloud.gray.client.plugin.ribbon.nacos.configuration;
22

33
import cn.springcloud.gray.client.config.properties.GrayHoldoutServerProperties;
4+
import cn.springcloud.gray.client.plugin.ribbon.nacos.NacosServerExplainer;
45
import cn.springcloud.gray.client.plugin.ribbon.nacos.NacosServerListProcessor;
6+
import cn.springcloud.gray.servernode.ServerExplainer;
57
import cn.springcloud.gray.servernode.ServerListProcessor;
8+
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
69
import com.alibaba.cloud.nacos.ribbon.NacosServerList;
7-
import com.alibaba.nacos.api.naming.NamingService;
810
import com.netflix.loadbalancer.Server;
911
import com.netflix.ribbon.Ribbon;
1012
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
1113
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
14+
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
1215
import org.springframework.context.annotation.Bean;
1316
import org.springframework.context.annotation.Configuration;
1417

@@ -20,8 +23,14 @@ public class GrayClientRibbonNacosAutoConfiguration {
2023

2124
@Bean
2225
public ServerListProcessor<Server> serverListProcessor(
23-
GrayHoldoutServerProperties grayHoldoutServerProperties, NamingService namingService){
24-
return new NacosServerListProcessor(grayHoldoutServerProperties, namingService);
26+
GrayHoldoutServerProperties grayHoldoutServerProperties, NacosDiscoveryProperties discoveryProperties){
27+
return new NacosServerListProcessor(grayHoldoutServerProperties, discoveryProperties.namingServiceInstance());
28+
}
29+
30+
31+
@Bean
32+
public ServerExplainer<Server> serverExplainer(SpringClientFactory springClientFactory){
33+
return new NacosServerExplainer(springClientFactory);
2534
}
2635

2736
}

spring-cloud-starter-gray-server/src/main/resources/META-INF/spring.factories

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
33
cn.springcloud.gray.server.configuration.GrayServerAutoConfiguration,\
44
cn.springcloud.gray.server.configuration.DBStorageConfiguration,\
55
cn.springcloud.gray.server.configuration.OperateAuditConfiguration,\
6-
cn.springcloud.gray.server.netflix.eureka.configuration.GrayServiceEurekaAutoConfiguration,\
76
cn.springcloud.gray.server.configuration.GrayServerEventAutoConfiguration,\
87
cn.springcloud.gray.server.configuration.OAuth2Config

0 commit comments

Comments
 (0)