Skip to content

Commit 524e920

Browse files
authored
Merge pull request #45 from SpringCloud/A
A
2 parents f8a1db9 + 6da40e4 commit 524e920

File tree

66 files changed

+732
-182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+732
-182
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33

44
[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
5-
[![Release](https://img.shields.io/badge/release-A.1.1.0-blue)](https://github.com/SpringCloud/spring-cloud-gray/releases/tag/A.1.1.0)
6-
[![Release](https://img.shields.io/badge/release-B.0.0.1-blue)](https://github.com/SpringCloud/spring-cloud-gray/releases/tag/B.0.0.1)
5+
[![A Release](https://img.shields.io/badge/release-A.1.1.1-blue)](https://github.com/SpringCloud/spring-cloud-gray/releases/tag/A.1.1.1)
6+
[![B Release](https://img.shields.io/badge/release-B.0.0.1-blue)](https://github.com/SpringCloud/spring-cloud-gray/releases/tag/B.0.0.1)
77

88
## 介绍
99
Spring Cloud Gray 是一套开源的微服务灰度路由解决方案,它由spring-cloud-gray-client,spring-cloud-gray-client-netflix 和 spring-cloud-tray-server,spring-cloud-gray-webui组成。<br/>
@@ -29,11 +29,11 @@ insert into `user` ( `user_id`, `account`, `name`, `password`, `roles`, `status`
2929
[管控端界面使用手册](doc/guide/gray-admin-guide.md)
3030

3131
## 版本信息
32-
项目版本 | srpingcloud版本 | springboot版本
32+
项目分支 | srpingcloud版本 | springboot版本
3333
--- | --- | ---
34-
A.1.1.0 | Edgware.SR6 | 1.5.22.RELEASE
35-
B.0.0.1 | Finchley.SR4 | 2.0.9.RELEASE
36-
C.0.0.1-SNAPHOST | Greenwich.SR2 | 2.1.7.RELEASE
34+
A | Edgware | 1.5.*
35+
B | Finchley | 2.0.*
36+
C | Greenwich | 2.1.*
3737

3838

3939
## Spring Cloud Gray 能做什么
@@ -171,9 +171,11 @@ spring-cloud-gray-plugin-feign | 灰度客户端与openFiegn集成的插件
171171
spring-cloud-gray-plugin-zuul | 灰度客户端与zuul 1.0集成的插件
172172
spring-cloud-gray-plugin-gateway | 灰度客户端与spring cloud gateway集成的插件(B版及以上)
173173
spring-cloud-gray-plugin-event-stream | 灰度客户端与spring cloud stream(rabbitmq)集成的插件
174+
spring-cloud-gray-plugin-ribbon-nacos-discovery | 灰度客户端支持ribbon与注册中心nacos集成的插件
174175
spring-cloud-gray-server | 灰度管控端的核心代码
175176
spring-cloud-gray-server-plugin-eureka | 灰度管控端与注册中心eureka集成的插件
176177
spring-cloud-gray-server-plugin-event-stream | 灰度管控端与spring cloud stream(rabbitmq)集成的插件
178+
spring-cloud-gray-server-plugin-nacos-discovery | 灰度管控端与注册中心nacos集成的插件
177179
spring-cloud-starter-gray-client | 灰度客户端starter
178180
spring-cloud-starter-gray-server | 灰度管控端starter
179181
spring-cloud-starter-gray-eureka-server | eureka server的灰度插件

doc/img/gray-all.png

-9.01 KB
Loading

doc/img/gray-release.png

142 KB
Loading

pom.xml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<groupId>cn.springcloud.gray</groupId>
1313
<artifactId>spring-cloud-gray</artifactId>
1414
<packaging>pom</packaging>
15-
<version>A.1.1.1-SNAPSHOT</version>
15+
<version>A.1.1.1</version>
1616
<url>https://github.com/SpringCloud/spring-cloud-gray</url>
1717
<organization>
1818
<name>Spring Cloud中国社区</name>
@@ -62,6 +62,7 @@
6262
<maven.compiler.target>1.8</maven.compiler.target>
6363
<java.version>1.8</java.version>
6464
<spring-cloud.version>Edgware.SR6</spring-cloud.version>
65+
<alibaba-cloud.version>1.5.0.RELEASE</alibaba-cloud.version>
6566
<springfox.version>2.9.2</springfox.version>
6667
<lombok.version>1.18.8</lombok.version>
6768
<slf4j.version>1.7.26</slf4j.version>
@@ -99,6 +100,17 @@
99100
<version>${caffeine.version}</version>
100101
</dependency>
101102

103+
104+
<!-- alibaba cloud start -->
105+
<dependency>
106+
<groupId>com.alibaba.cloud</groupId>
107+
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
108+
<version>${alibaba-cloud.version}</version>
109+
<optional>true</optional>
110+
</dependency>
111+
<!-- alibaba cloud end -->
112+
113+
102114
<dependency>
103115
<groupId>io.springfox</groupId>
104116
<artifactId>springfox-swagger2</artifactId>
@@ -169,6 +181,12 @@
169181
<version>${project.version}</version>
170182
</dependency>
171183

184+
<dependency>
185+
<groupId>cn.springcloud.gray</groupId>
186+
<artifactId>spring-cloud-gray-plugin-ribbon-nacos-discovery</artifactId>
187+
<version>${project.version}</version>
188+
</dependency>
189+
172190
<dependency>
173191
<groupId>cn.springcloud.gray</groupId>
174192
<artifactId>spring-cloud-gray-plugin-feign</artifactId>
@@ -204,6 +222,11 @@
204222
<version>${project.version}</version>
205223
</dependency>
206224

225+
<dependency>
226+
<groupId>cn.springcloud.gray</groupId>
227+
<artifactId>spring-cloud-gray-server-plugin-nacos-discovery</artifactId>
228+
<version>${project.version}</version>
229+
</dependency>
207230
<!-- gray server plugins end -->
208231

209232

spring-cloud-gray-client-netflix/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>spring-cloud-gray</artifactId>
77
<groupId>cn.springcloud.gray</groupId>
8-
<version>A.1.1.1-SNAPSHOT</version>
8+
<version>A.1.1.1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixRibbonGrayAutoConfiguration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import cn.springcloud.gray.GrayManager;
55
import cn.springcloud.gray.choose.GrayPredicate;
66
import cn.springcloud.gray.client.netflix.RibbonServerChooser;
7+
import cn.springcloud.gray.client.netflix.ribbon.RibbonServerExplainer;
78
import cn.springcloud.gray.routing.connectionpoint.DefaultRoutingConnectionPoint;
89
import cn.springcloud.gray.routing.connectionpoint.RoutingConnectionPoint;
910
import cn.springcloud.gray.client.netflix.ribbon.configuration.GrayRibbonClientsConfiguration;
@@ -16,6 +17,7 @@
1617
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
1718
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1819
import org.springframework.cloud.netflix.ribbon.RibbonClients;
20+
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
1921
import org.springframework.context.annotation.Bean;
2022
import org.springframework.context.annotation.Configuration;
2123

@@ -47,4 +49,11 @@ public RibbonServerChooser ribbonServerChooser(
4749
grayPredicate, serverExplainer, serverListProcess);
4850
}
4951

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

spring-cloud-gray-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>spring-cloud-gray</artifactId>
77
<groupId>cn.springcloud.gray</groupId>
8-
<version>A.1.1.1-SNAPSHOT</version>
8+
<version>A.1.1.1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package cn.springcloud.gray.client.config;
2+
3+
import cn.springcloud.gray.local.DefaultInstanceLocalInfoInitiralizer;
4+
import cn.springcloud.gray.local.InstanceLocalInfoInitiralizer;
5+
import cn.springcloud.gray.servernode.DefaultInstanceDiscoveryClient;
6+
import cn.springcloud.gray.servernode.InstanceDiscoveryClient;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9+
import org.springframework.context.annotation.Bean;
10+
import org.springframework.context.annotation.Configuration;
11+
12+
@Configuration
13+
@ConditionalOnProperty(value = "gray.enabled")
14+
public class GrayClientDiscoveryAutoConfiguration {
15+
16+
17+
@Bean
18+
@ConditionalOnMissingBean
19+
public InstanceDiscoveryClient instanceDiscoveryClient(){
20+
return new DefaultInstanceDiscoveryClient();
21+
}
22+
23+
24+
@Bean
25+
@ConditionalOnMissingBean
26+
public InstanceLocalInfoInitiralizer instanceLocalInfoInitiralizer(){
27+
return new DefaultInstanceLocalInfoInitiralizer();
28+
}
29+
30+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package cn.springcloud.gray.local;
2+
3+
4+
public class DefaultInstanceLocalInfoInitiralizer extends LazyInstanceLocalInfoInitiralizer {
5+
6+
@Override
7+
protected String getLocalInstanceId() {
8+
return "";
9+
}
10+
}

0 commit comments

Comments
 (0)