Skip to content

Commit 9094f4a

Browse files
authored
support spring cloud gateway discovery (#246)
1 parent cb3278e commit 9094f4a

File tree

8 files changed

+87
-15
lines changed

8 files changed

+87
-15
lines changed

spring-cloud-huawei-dependencies/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<snakeyaml.version>1.26</snakeyaml.version>
2626
<commons-configuration.version>1.10</commons-configuration.version>
2727
<websocket.version>1.5.0</websocket.version>
28+
<reactor.version>3.3.3.RELEASE</reactor.version>
2829
</properties>
2930

3031
<dependencyManagement>
@@ -161,6 +162,11 @@
161162
<artifactId>Java-WebSocket</artifactId>
162163
<version>${websocket.version}</version>
163164
</dependency>
165+
<dependency>
166+
<groupId>io.projectreactor</groupId>
167+
<artifactId>reactor-core</artifactId>
168+
<version>${reactor.version}</version>
169+
</dependency>
164170
</dependencies>
165171
</dependencyManagement>
166172
</project>

spring-cloud-huawei-sample/gateway-demo/gateway/src/main/resources/application.yaml

-7
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,6 @@ spring:
66
name: gateway-service
77
cloud:
88
gateway:
9-
routes:
10-
- id: backend-service # 将 /provider1/开头的请求,转发到provider1
11-
uri: lb://backend-service
12-
predicates:
13-
- Path=/**
14-
filters:
15-
- StripPrefix=1
169
discovery:
1710
locator:
1811
enabled: true

spring-cloud-huawei-servicecomb-discovery/pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,9 @@
7878
<groupId>org.java-websocket</groupId>
7979
<artifactId>Java-WebSocket</artifactId>
8080
</dependency>
81+
<dependency>
82+
<groupId>io.projectreactor</groupId>
83+
<artifactId>reactor-core</artifactId>
84+
</dependency>
8185
</dependencies>
8286
</project>

spring-cloud-huawei-servicecomb-discovery/src/main/java/com/huaweicloud/servicecomb/discovery/client/ServiceCombClient.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -354,12 +354,12 @@ public List<ServiceInstance> getInstances(Microservice microservice, String revi
354354
map.put(ZONE, instance.getDataCenterInfo().getZone());
355355
}
356356
instanceList.add(
357-
new DefaultServiceInstance(instance.getInstanceId(), instance.getServiceId(), host,
357+
new DefaultServiceInstance(instance.getInstanceId(), instance.getServiceName(), host,
358358
port, false, map));
359359
}
360360
return instanceList;
361361
} else if (response.getStatusCode() != HttpStatus.SC_NOT_MODIFIED) {
362-
LOGGER.warn(
362+
LOGGER.debug(
363363
"read response failed. status:" + response.getStatusCode() + "; message:" + response
364364
.getStatusMessage() + "; content:" + response.getContent());
365365
}

spring-cloud-huawei-servicecomb-discovery/src/main/java/com/huaweicloud/servicecomb/discovery/discovery/MicroserviceHandler.java

-5
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,11 @@
2121
import java.net.InetSocketAddress;
2222
import java.net.Socket;
2323
import java.util.ArrayList;
24-
import java.util.Collections;
2524
import java.util.List;
2625

2726
import java.util.Map;
2827
import java.util.concurrent.ConcurrentHashMap;
29-
import org.slf4j.Logger;
30-
import org.slf4j.LoggerFactory;
3128
import org.springframework.cloud.client.ServiceInstance;
32-
import com.huaweicloud.common.exception.ServiceCombException;
3329
import com.huaweicloud.servicecomb.discovery.client.ServiceCombClient;
3430
import com.huaweicloud.servicecomb.discovery.client.model.Framework;
3531
import com.huaweicloud.servicecomb.discovery.client.model.Microservice;
@@ -41,7 +37,6 @@
4137
* @Date 12:26 2019-07-17
4238
**/
4339
public class MicroserviceHandler {
44-
private static final Logger LOGGER = LoggerFactory.getLogger(MicroserviceHandler.class);
4540

4641
public static final Map<String, String> serviceRevision = new ConcurrentHashMap<>();
4742

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.huaweicloud.servicecomb.discovery.discovery;
2+
3+
import org.springframework.cloud.client.ServiceInstance;
4+
import org.springframework.cloud.client.discovery.DiscoveryClient;
5+
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
6+
import reactor.core.publisher.Flux;
7+
import reactor.core.scheduler.Schedulers;
8+
9+
/**
10+
* @Author GuoYl123
11+
* @Date 2020/8/18
12+
**/
13+
public class ServiceCombReactiveDiscoveryClient implements ReactiveDiscoveryClient {
14+
15+
private DiscoveryClient discoveryClient;
16+
17+
public ServiceCombReactiveDiscoveryClient(DiscoveryClient serviceCombDiscoveryClient) {
18+
this.discoveryClient = serviceCombDiscoveryClient;
19+
}
20+
21+
@Override
22+
public String description() {
23+
return "this is servicecomb reactive implement";
24+
}
25+
26+
@Override
27+
public Flux<ServiceInstance> getInstances(String serviceId) {
28+
return Flux.defer(() -> Flux.fromIterable(discoveryClient.getInstances(serviceId)))
29+
.subscribeOn(Schedulers.boundedElastic());
30+
}
31+
32+
33+
@Override
34+
public Flux<String> getServices() {
35+
return Flux.defer(() -> Flux.fromIterable(discoveryClient.getServices()))
36+
.subscribeOn(Schedulers.boundedElastic());
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.huaweicloud.servicecomb.discovery.discovery;
2+
3+
import com.huaweicloud.servicecomb.discovery.ConditionalOnServiceCombDiscoveryEnabled;
4+
import com.huaweicloud.servicecomb.discovery.client.ServiceCombClient;
5+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
6+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
8+
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
9+
import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled;
10+
import org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration;
11+
import org.springframework.cloud.client.discovery.composite.reactive.ReactiveCompositeDiscoveryClientAutoConfiguration;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Configuration;
14+
15+
/**
16+
* @Author GuoYl123
17+
* @Date 2020/8/18
18+
**/
19+
@Configuration(proxyBeanMethods = false)
20+
@ConditionalOnDiscoveryEnabled
21+
@ConditionalOnReactiveDiscoveryEnabled
22+
@ConditionalOnServiceCombDiscoveryEnabled
23+
@AutoConfigureAfter({ServiceCombDiscoveryClientConfiguration.class,
24+
ReactiveCompositeDiscoveryClientAutoConfiguration.class})
25+
@AutoConfigureBefore({ReactiveCommonsClientAutoConfiguration.class})
26+
public class ServiceCombReactiveDiscoveryClientConfiguration {
27+
28+
@Bean
29+
@ConditionalOnMissingBean
30+
public ServiceCombReactiveDiscoveryClient serviceCombDiscoveryClient(
31+
ServiceCombDiscoveryProperties discoveryProperties, ServiceCombClient serviceCombClient) {
32+
return new ServiceCombReactiveDiscoveryClient(
33+
new ServiceCombDiscoveryClient(discoveryProperties, serviceCombClient));
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
22
com.huaweicloud.servicecomb.discovery.discovery.ServiceCombDiscoveryClientConfiguration,\
33
com.huaweicloud.servicecomb.discovery.ribbon.ServiceCombRibbonAutoConfiguration,\
4-
com.huaweicloud.servicecomb.discovery.registry.ServiceCombRegistryAutoConfiguration
4+
com.huaweicloud.servicecomb.discovery.registry.ServiceCombRegistryAutoConfiguration, \
5+
com.huaweicloud.servicecomb.discovery.discovery.ServiceCombReactiveDiscoveryClientConfiguration
56

0 commit comments

Comments
 (0)