org.springframework.boot
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallback.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallback.java
index 30a9de2b..2e6a9aab 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallback.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallback.java
@@ -20,7 +20,6 @@ import com.alibaba.cloud.examples.service.EchoService;
/**
* @author lengleng
- * @date 2019-08-01
*
* sentinel 降级处理
*/
@@ -35,7 +34,7 @@ public class EchoServiceFallback implements EchoService {
/**
* 调用服务提供方的输出接口.
* @param str 用户输入
- * @return
+ * @return String
*/
@Override
public String echo(String str) {
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallbackFactory.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallbackFactory.java
index 94366678..9df335d2 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallbackFactory.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/fallback/EchoServiceFallbackFactory.java
@@ -22,7 +22,6 @@ import org.springframework.stereotype.Component;
/**
* @author lengleng
- * @date 2019-08-01
*/
@Component
public class EchoServiceFallbackFactory implements FallbackFactory {
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/service/EchoService.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/service/EchoService.java
index 2fac49df..417eff79 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/service/EchoService.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/src/main/java/com/alibaba/cloud/examples/service/EchoService.java
@@ -24,7 +24,6 @@ import org.springframework.web.bind.annotation.PathVariable;
/**
* @author lengleng
- * @date 2019-08-01
*
* example feign client
*/
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/src/main/java/com/alibaba/cloud/examples/controller/EchoController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/src/main/java/com/alibaba/cloud/examples/controller/EchoController.java
index c74f7b48..ccf36448 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/src/main/java/com/alibaba/cloud/examples/controller/EchoController.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/src/main/java/com/alibaba/cloud/examples/controller/EchoController.java
@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.RestController;
/**
* @author lengleng
- * @date 2019-08-01
*/
@RestController
public class EchoController {
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml
index 530f132b..3b3a7c1a 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml
@@ -10,11 +10,13 @@
4.0.0
+
sentinel-webflux-example
Spring Cloud Starter Alibaba Sentinel x WebFlux Example
Example demonstrating how to use sentinel with webflux
jar
+
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java
index d3e1ffea..9dccb6b2 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/com/alibaba/cloud/examples/ZuulConfiguration.java
@@ -41,10 +41,10 @@ public class ZuulConfiguration {
@Override
public BlockResponse fallbackResponse(String route, Throwable cause) {
- if (route.equals("my-service3")) {
+ if ("my-service3".equals(route)) {
return new BlockResponse(433, "Sentinel Block3", route);
}
- else if (route.equals("my-service4")) {
+ else if ("my-service4".equals(route)) {
return new BlockResponse(444, "my-service4", route);
}
else {
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml
index 1af3a87e..c37db212 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml
@@ -13,14 +13,13 @@
com.alibaba.cloud
spring-cloud-dubbo-client-sample
Spring Cloud Dubbo Client Sample
- ${revision}
com.alibaba.cloud
spring-cloud-dubbo-sample-api
- ${revision}
+ ${project.version}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java
index 5171d48f..ec7f585a 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java
@@ -17,7 +17,7 @@
package com.alibaba.cloud.dubbo.bootstrap;
import com.alibaba.cloud.dubbo.service.EchoService;
-import org.apache.dubbo.config.annotation.Reference;
+import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -27,13 +27,15 @@ import org.springframework.web.bind.annotation.RestController;
/**
* Dubbo Spring Cloud Client Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
@RestController
public class DubboSpringCloudClientBootstrap {
- @Reference
+ @DubboReference
private EchoService echoService;
@GetMapping("/echo")
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml
index 5146a6d5..6801b6c4 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml
@@ -1,6 +1,9 @@
dubbo:
cloud:
subscribed-services: spring-cloud-alibaba-dubbo-server
+ protocols:
+ dubbo:
+ port: -1
spring:
application:
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
index 000859ca..de9cf76b 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
@@ -23,7 +23,7 @@ import com.alibaba.cloud.dubbo.annotation.DubboTransported;
import com.alibaba.cloud.dubbo.service.RestService;
import com.alibaba.cloud.dubbo.service.User;
import com.alibaba.cloud.dubbo.service.UserService;
-import org.apache.dubbo.config.annotation.Reference;
+import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -52,6 +52,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
/**
* Dubbo Spring Cloud Consumer Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
@@ -60,10 +62,10 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@EnableCaching
public class DubboSpringCloudConsumerBootstrap {
- @Reference
+ @DubboReference
private UserService userService;
- @Reference(version = "1.0.0", protocol = "dubbo")
+ @DubboReference(version = "1.0.0", protocol = "dubbo")
private RestService restService;
@Autowired
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
index c46f7a87..ee44526a 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
@@ -1,14 +1,12 @@
dubbo:
- registry:
- # The Spring Cloud Dubbo's registry extension
- ## the default value of dubbo-provider-services is "*", that means to subscribe all providers,
- ## thus it's optimized if subscriber specifies the required providers.
- address: spring-cloud://localhost
-# The traditional Dubbo's registry also is supported
-# address: zookeeper://127.0.0.1:2181
cloud:
# The subscribed services in consumer side
subscribed-services: ${provider.application.name}
+ protocols:
+ dubbo:
+ port: -1
+ consumer:
+ check: false
consumer:
check: false
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml
index e753ea0e..c4b583a8 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml
@@ -8,6 +8,8 @@ spring:
# default disable all
cloud:
nacos:
+ username: nacos
+ password: nacos
discovery:
enabled: false
register-enabled: false
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java
index 286e2d2b..2421c755 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudProviderBootstrap.java
@@ -23,6 +23,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Dubbo Spring Cloud Provider Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
index bd11c413..b1acd0a0 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
@@ -20,12 +20,12 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.DubboService;
/**
* In-Memory {@link UserService} implementation.
*/
-@Service(protocol = "dubbo")
+@DubboService(protocol = "dubbo")
public class InMemoryUserService implements UserService {
private Map usersRepository = new HashMap<>();
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java
index a71cc193..24f34f46 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/com/alibaba/cloud/dubbo/service/StandardRestService.java
@@ -30,7 +30,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
-import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,7 +42,7 @@ import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
*
* @author Mercy
*/
-@Service(version = "1.0.0", protocol = { "dubbo", "rest" })
+@DubboService(version = "1.0.0", protocol = { "dubbo", "rest" })
@Path("/")
public class StandardRestService implements RestService {
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
index 1a7ec7c5..5a855843 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
@@ -9,11 +9,6 @@ dubbo:
name: rest
port: 9090
server: netty
- registry:
-# The Spring Cloud Dubbo's registry extension
- address: spring-cloud://localhost
-# The traditional Dubbo's registry
-# address: zookeeper://127.0.0.1:2181
feign:
hystrix:
enabled: true
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
index 8f56b284..7efde94a 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
@@ -33,6 +33,7 @@ spring:
enabled: true
register-enabled: true
server-addr: 127.0.0.1:8848
+ ephemeral: false
---
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java
index ab456ccc..d13733c3 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudWebProviderBootstrap.java
@@ -22,6 +22,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Dubbo Spring Cloud Provider Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
index bd11c413..b1acd0a0 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/InMemoryUserService.java
@@ -20,12 +20,12 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.DubboService;
/**
* In-Memory {@link UserService} implementation.
*/
-@Service(protocol = "dubbo")
+@DubboService(protocol = "dubbo")
public class InMemoryUserService implements UserService {
private Map usersRepository = new HashMap<>();
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java
index c0af9bfc..269a6bf4 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/com/alibaba/cloud/dubbo/service/SpringRestService.java
@@ -19,7 +19,7 @@ package com.alibaba.cloud.dubbo.service;
import java.util.HashMap;
import java.util.Map;
-import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +39,7 @@ import static com.alibaba.cloud.dubbo.util.LoggerUtils.log;
*
* @author Mercy
*/
-@Service(version = "1.0.0")
+@DubboService(version = "1.0.0")
@RestController
public class SpringRestService implements RestService {
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
index b6858c74..2bc346c8 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
@@ -3,16 +3,7 @@ dubbo:
base-packages: com.alibaba.cloud.dubbo.service
protocols:
dubbo:
- name: dubbo
port: -1
- registries:
- new:
- address: spring-cloud://localhost
-# registry:
-# The Spring Cloud Dubbo's registry extension
-# address: spring-cloud://localhost
-# The traditional Dubbo's registry
-# address: nacos://127.0.0.1:8848
feign:
hystrix:
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/bootstrap.yaml
index 8f56b284..057185f9 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/bootstrap.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/bootstrap.yaml
@@ -8,6 +8,8 @@ spring:
# default disable all
cloud:
nacos:
+ username: nacos
+ password: nacos
discovery:
enabled: false
register-enabled: false
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java
index bd7e1784..d54597cc 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java
@@ -17,7 +17,7 @@
package com.alibaba.cloud.dubbo.bootstrap;
import com.alibaba.cloud.dubbo.service.EchoService;
-import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -25,6 +25,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Dubbo Spring Cloud Server Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
@@ -36,7 +38,7 @@ public class DubboSpringCloudServerBootstrap {
}
-@Service
+@DubboService
class EchoServiceImpl implements EchoService {
@Override
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServletGatewayBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServletGatewayBootstrap.java
index face2b41..9aaab1fe 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServletGatewayBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboSpringCloudServletGatewayBootstrap.java
@@ -24,6 +24,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* Dubbo Spring Cloud Servlet Gateway Bootstrap.
+ *
+ * @author Mercy
*/
@EnableDiscoveryClient
@EnableAutoConfiguration
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboGatewayServlet.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboGatewayServlet.java
index 8fe7f25d..c5ef1539 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboGatewayServlet.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboGatewayServlet.java
@@ -52,8 +52,8 @@ import org.springframework.util.StreamUtils;
import org.springframework.web.servlet.HttpServletBean;
import org.springframework.web.util.UriComponents;
-import static org.apache.commons.lang3.StringUtils.substringAfter;
-import static org.apache.commons.lang3.StringUtils.substringBetween;
+import static org.apache.commons.lang.StringUtils.substringAfter;
+import static org.apache.commons.lang.StringUtils.substringBetween;
import static org.springframework.web.util.UriComponentsBuilder.fromUriString;
@WebServlet(urlPatterns = "/dsc/*")
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml
index 690d2031..c6c66a83 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml
@@ -20,9 +20,10 @@
org.springframework.boot
spring-boot-starter-actuator
+
- org.springframework.boot
- spring-boot-starter-web
+ org.springframework.cloud
+ spring-cloud-starter-gateway
@@ -33,10 +34,6 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
-
- io.projectreactor
- reactor-core
-
org.springframework.boot
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/src/main/resources/application.yml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/src/main/resources/application.yml
index 51550341..22642a71 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/src/main/resources/application.yml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/src/main/resources/application.yml
@@ -6,11 +6,13 @@ spring:
username: nacos
password: nacos
discovery:
- server-addr: localhost:8848
+ server-addr: 127.0.0.1:8848
+ group: test
gateway:
discovery:
locator:
enabled: true
+
application:
name: node-service
sidecar:
@@ -18,8 +20,9 @@ sidecar:
ip: 127.0.0.1
# 异构微服务的端口
port: 8060
+
# 异构微服务的健康检查URL
- health-check-url: http://localhost:8060/health.json
+ #health-check-url: http://localhost:8060/health.json
management:
endpoint:
health:
diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml
index 0d586b60..c0bbf98a 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml
@@ -13,8 +13,7 @@
spring-cloud-bus-rocketmq-example
Spring Cloud Starter Bus Alibaba RocketMQ Example
Example demonstrating how to use Spring Cloud Bus RocketMQ
- jar
-
+ jar
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/pom.xml
index 3316d7bd..7f2550c2 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/pom.xml
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/pom.xml
@@ -101,6 +101,12 @@
true
+
+ org.apache.commons
+ commons-lang3
+ true
+
+
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java
index 784d12dc..a0a5526f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/config/DataSourcePropertiesConfiguration.java
@@ -34,6 +34,7 @@ import org.springframework.util.ObjectUtils;
* @see ZookeeperDataSourceProperties
* @see FileDataSourceProperties
* @see RedisDataSourceProperties
+ * @see ConsulDataSourceProperties
*/
public class DataSourcePropertiesConfiguration {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/pom.xml
index 2461c672..49283a18 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/pom.xml
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/pom.xml
@@ -59,6 +59,7 @@
spring-cloud-starter-gateway
true
+
com.fasterxml.jackson.dataformat
jackson-dataformat-xml
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java
index 9cf27331..8158fdef 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/ConfigConstants.java
@@ -37,7 +37,7 @@ public final class ConfigConstants {
/**
* ConfigurationProperties for {@link SentinelZuulProperties}.
*/
- public static final String ZUUl_PREFIX = "spring.cloud.sentinel.zuul";
+ public static final String ZUUL_PREFIX = "spring.cloud.sentinel.zuul";
/**
* ConfigurationProperties for {@link SentinelGatewayProperties}.
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java
index feeed96c..2ab4c05a 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java
@@ -47,7 +47,7 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration
@ConditionalOnClass(ZuulServlet.class)
-@ConditionalOnProperty(prefix = ConfigConstants.ZUUl_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true)
+@ConditionalOnProperty(prefix = ConfigConstants.ZUUL_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties(SentinelZuulProperties.class)
public class SentinelZuulAutoConfiguration {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java
index cd7bade8..f1ab8da7 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulProperties.java
@@ -28,7 +28,7 @@ import org.springframework.boot.context.properties.NestedConfigurationProperty;
/**
* @author Jim
*/
-@ConfigurationProperties(prefix = ConfigConstants.ZUUl_PREFIX)
+@ConfigurationProperties(prefix = ConfigConstants.ZUUL_PREFIX)
public class SentinelZuulProperties {
@NestedConfigurationProperty
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java
index e27b3e06..e8199832 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java
@@ -18,6 +18,8 @@ package com.alibaba.cloud.nacos;
import java.util.Objects;
+import javax.annotation.PreDestroy;
+
import com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureException;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
@@ -73,6 +75,14 @@ public class NacosConfigManager {
return service;
}
+ @PreDestroy
+ public void destroy() throws NacosException {
+ if (service != null) {
+ service.shutDown();
+ service = null;
+ }
+ }
+
public NacosConfigProperties getNacosConfigProperties() {
return nacosConfigProperties;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java
index 2d83fa5d..2abdc349 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySource.java
@@ -16,12 +16,16 @@
package com.alibaba.cloud.nacos.client;
+import java.util.Collections;
import java.util.Date;
+import java.util.List;
import java.util.Map;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import org.springframework.core.env.MapPropertySource;
+import org.springframework.core.env.PropertySource;
+import org.springframework.util.CollectionUtils;
/**
* @author xiaojing
@@ -58,6 +62,32 @@ public class NacosPropertySource extends MapPropertySource {
this.isRefreshable = isRefreshable;
}
+ NacosPropertySource(List> propertySources, String group,
+ String dataId, Date timestamp, boolean isRefreshable) {
+ this(group, dataId, getSourceMap(group, dataId, propertySources), timestamp,
+ isRefreshable);
+ }
+
+ private static Map getSourceMap(String group, String dataId,
+ List> propertySources) {
+ if (CollectionUtils.isEmpty(propertySources)) {
+ return Collections.emptyMap();
+ }
+ // If only one, return the internal element, otherwise wrap it.
+ if (propertySources.size() == 1) {
+ PropertySource propertySource = propertySources.get(0);
+ if (propertySource != null && propertySource.getSource() instanceof Map) {
+ return (Map) propertySource.getSource();
+ }
+ }
+ // If it is multiple, it will be returned as it is, and the internal elements
+ // cannot be directly retrieved, so the user needs to implement the retrieval
+ // logic by himself
+ return Collections.singletonMap(
+ String.join(NacosConfigProperties.COMMAS, dataId, group),
+ propertySources);
+ }
+
public String getGroup() {
return this.group;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java
index 7c3dbaa7..c30c52a8 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java
@@ -16,8 +16,9 @@
package com.alibaba.cloud.nacos.client;
+import java.util.Collections;
import java.util.Date;
-import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import com.alibaba.cloud.nacos.NacosPropertySourceRepository;
@@ -27,6 +28,7 @@ import com.alibaba.nacos.api.exception.NacosException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.env.PropertySource;
import org.springframework.util.StringUtils;
/**
@@ -38,7 +40,7 @@ public class NacosPropertySourceBuilder {
private static final Logger log = LoggerFactory
.getLogger(NacosPropertySourceBuilder.class);
- private static final Map EMPTY_MAP = new LinkedHashMap();
+ private static final Map EMPTY_MAP = Collections.emptyMap();
private ConfigService configService;
@@ -71,14 +73,15 @@ public class NacosPropertySourceBuilder {
*/
NacosPropertySource build(String dataId, String group, String fileExtension,
boolean isRefreshable) {
- Map p = loadNacosData(dataId, group, fileExtension);
- NacosPropertySource nacosPropertySource = new NacosPropertySource(group, dataId,
- p, new Date(), isRefreshable);
+ List> propertySources = loadNacosData(dataId, group,
+ fileExtension);
+ NacosPropertySource nacosPropertySource = new NacosPropertySource(propertySources,
+ group, dataId, new Date(), isRefreshable);
NacosPropertySourceRepository.collectNacosPropertySource(nacosPropertySource);
return nacosPropertySource;
}
- private Map loadNacosData(String dataId, String group,
+ private List> loadNacosData(String dataId, String group,
String fileExtension) {
String data = null;
try {
@@ -87,24 +90,23 @@ public class NacosPropertySourceBuilder {
log.warn(
"Ignore the empty nacos configuration and get it based on dataId[{}] & group[{}]",
dataId, group);
- return EMPTY_MAP;
+ return Collections.emptyList();
}
if (log.isDebugEnabled()) {
log.debug(String.format(
"Loading nacos data, dataId: '%s', group: '%s', data: %s", dataId,
group, data));
}
- Map dataMap = NacosDataParserHandler.getInstance()
- .parseNacosData(data, fileExtension);
- return dataMap == null ? EMPTY_MAP : dataMap;
+ return NacosDataParserHandler.getInstance().parseNacosData(dataId, data,
+ fileExtension);
}
catch (NacosException e) {
- log.error("get data from Nacos error,dataId:{}, ", dataId, e);
+ log.error("get data from Nacos error,dataId:{} ", dataId, e);
}
catch (Exception e) {
- log.error("parse data from Nacos error,dataId:{},data:{},", dataId, data, e);
+ log.error("parse data from Nacos error,dataId:{},data:{}", dataId, data, e);
}
- return EMPTY_MAP;
+ return Collections.emptyList();
}
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java
index ef075bcb..2712d15d 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java
@@ -21,7 +21,6 @@ import java.util.List;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.cloud.nacos.NacosPropertySourceRepository;
-import com.alibaba.cloud.nacos.parser.NacosDataParserHandler;
import com.alibaba.cloud.nacos.refresh.NacosContextRefresher;
import com.alibaba.nacos.api.config.ConfigService;
import org.slf4j.Logger;
@@ -101,7 +100,6 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
loadSharedConfiguration(composite);
loadExtConfiguration(composite);
loadApplicationConfiguration(composite, dataIdPrefix, nacosConfigProperties, env);
-
return composite;
}
@@ -165,7 +163,6 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
private void checkConfiguration(List configs,
String tips) {
- String[] dataIds = new String[configs.size()];
for (int i = 0; i < configs.size(); i++) {
String dataId = configs.get(i).getDataId();
if (dataId == null || dataId.trim().length() == 0) {
@@ -173,10 +170,7 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
"the [ spring.cloud.nacos.config.%s[%s] ] must give a dataId",
tips, i));
}
- dataIds[i] = dataId;
}
- // Just decide that the current dataId must have a suffix
- NacosDataParserHandler.getInstance().checkDataId(dataIds);
}
private void loadNacosDataIfPresent(final CompositePropertySource composite,
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java
index d5b51660..d00dfe63 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java
@@ -36,7 +36,7 @@ import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
*
* @author xiaojing
*/
-@Endpoint(id = "nacos-config")
+@Endpoint(id = "nacosconfig")
public class NacosConfigEndpoint {
private final NacosConfigProperties properties;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractPropertySourceLoader.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractPropertySourceLoader.java
new file mode 100644
index 00000000..0e4cdeb0
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractPropertySourceLoader.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.nacos.parser;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.springframework.boot.env.PropertySourceLoader;
+import org.springframework.core.env.PropertySource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.StringUtils;
+
+import static com.alibaba.cloud.nacos.parser.AbstractNacosDataParser.DOT;
+
+/**
+ * Nacos-specific loader, If need to support other methods of parsing,you need to do the
+ * following steps:
+ *
+ * 1.inherit {@link AbstractPropertySourceLoader} ;
+ * 2. define the file{@code spring.factories} and append
+ * {@code org.springframework.boot.env.PropertySourceLoader=..};
+ * 3.the last step validate.
+ *
+ * Notice the use of {@link NacosByteArrayResource} .
+ *
+ * @author zkz
+ */
+public abstract class AbstractPropertySourceLoader implements PropertySourceLoader {
+
+ /**
+ * Prevent interference with other loaders.Nacos-specific loader, unless the reload
+ * changes it.
+ * @param name the root name of the property source. If multiple documents are loaded
+ * an additional suffix should be added to the name for each source loaded.
+ * @param resource the resource to load
+ * @return if the resource can be loaded
+ */
+ protected boolean canLoad(String name, Resource resource) {
+ return resource instanceof NacosByteArrayResource;
+ }
+
+ /**
+ * Load the resource into one or more property sources. Implementations may either
+ * return a list containing a single source, or in the case of a multi-document format
+ * such as yaml a source for each document in the resource.
+ * @param name the root name of the property source. If multiple documents are loaded
+ * an additional suffix should be added to the name for each source loaded.
+ * @param resource the resource to load
+ * @return a list property sources
+ * @throws IOException if the source cannot be loaded
+ */
+ @Override
+ public List> load(String name, Resource resource)
+ throws IOException {
+ if (!canLoad(name, resource)) {
+ return Collections.emptyList();
+ }
+ return this.doLoad(name, resource);
+ }
+
+ /**
+ * Load the resource into one or more property sources. Implementations may either
+ * return a list containing a single source, or in the case of a multi-document format
+ * such as yaml a source for each document in the resource.
+ * @param name the root name of the property source. If multiple documents are loaded
+ * an additional suffix should be added to the name for each source loaded.
+ * @param resource the resource to load
+ * @return a list property sources
+ * @throws IOException if the source cannot be loaded
+ */
+ protected abstract List> doLoad(String name, Resource resource)
+ throws IOException;
+
+ protected void flattenedMap(Map result, Map dataMap,
+ String parentKey) {
+ if (dataMap == null || dataMap.isEmpty()) {
+ return;
+ }
+ Set> entries = dataMap.entrySet();
+ for (Iterator> iterator = entries.iterator(); iterator
+ .hasNext();) {
+ Map.Entry entry = iterator.next();
+ String key = entry.getKey();
+ Object value = entry.getValue();
+
+ String fullKey = StringUtils.isEmpty(parentKey) ? key : key.startsWith("[")
+ ? parentKey.concat(key) : parentKey.concat(DOT).concat(key);
+
+ if (value instanceof Map) {
+ Map map = (Map) value;
+ flattenedMap(result, map, fullKey);
+ continue;
+ }
+ else if (value instanceof Collection) {
+ int count = 0;
+ Collection
org.mockito
mockito-junit-jupiter
3.1.0
- compile
+ test
+
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
index 3ee047b4..632448db 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
@@ -183,17 +183,17 @@ public class NacosDiscoveryProperties {
private String secretKey;
/**
- * Heart beat interval. Time unit: second.
+ * Heart beat interval. Time unit: millisecond.
*/
private Integer heartBeatInterval;
/**
- * Heart beat timeout. Time unit: second.
+ * Heart beat timeout. Time unit: millisecond.
*/
private Integer heartBeatTimeout;
/**
- * Ip delete timeout. Time unit: second.
+ * Ip delete timeout. Time unit: millisecond.
*/
private Integer ipDeleteTimeout;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
index b0dd3628..6e1af695 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
@@ -31,7 +31,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* @author xiaojing
@@ -58,7 +58,7 @@ public class NacosDiscoveryClientConfiguration {
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager,
NacosDiscoveryProperties nacosDiscoveryProperties,
- ObjectProvider taskExecutorObjectProvider) {
+ ObjectProvider taskExecutorObjectProvider) {
return new NacosWatch(nacosServiceManager, nacosDiscoveryProperties,
taskExecutorObjectProvider);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
index 4a78238f..bcb59035 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
@@ -27,7 +27,6 @@ import java.util.concurrent.atomic.AtomicLong;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
-import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.Event;
import com.alibaba.nacos.api.naming.listener.EventListener;
@@ -41,7 +40,6 @@ import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.SmartLifecycle;
-import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
@@ -66,14 +64,15 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
private final NacosDiscoveryProperties properties;
- private final TaskScheduler taskScheduler;
+ private final ThreadPoolTaskScheduler taskScheduler;
public NacosWatch(NacosServiceManager nacosServiceManager,
NacosDiscoveryProperties properties,
- ObjectProvider taskScheduler) {
+ ObjectProvider taskScheduler) {
this.nacosServiceManager = nacosServiceManager;
this.properties = properties;
- this.taskScheduler = taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler);
+ this.taskScheduler = taskScheduler.stream().findAny()
+ .orElseGet(NacosWatch::getTaskScheduler);
}
private static ThreadPoolTaskScheduler getTaskScheduler() {
@@ -156,7 +155,7 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
if (this.watchFuture != null) {
// shutdown current user-thread,
// then the other daemon-threads will terminate automatic.
- ((ThreadPoolTaskScheduler) this.taskScheduler).shutdown();
+ this.taskScheduler.shutdown();
this.watchFuture.cancel(true);
}
@@ -167,7 +166,7 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
namingService.unsubscribe(properties.getService(), properties.getGroup(),
Arrays.asList(properties.getClusterName()), eventListener);
}
- catch (NacosException e) {
+ catch (Exception e) {
log.error("namingService unsubscribe failed, properties:{}", properties,
e);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java
index ea63c583..5a925ec3 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java
@@ -26,6 +26,7 @@ import org.springframework.boot.actuate.health.HealthIndicator;
* The {@link HealthIndicator} for Nacos Discovery.
*
* @author Mercy
+ * @since 2.2.0
* @see HealthIndicator
*/
public class NacosDiscoveryHealthIndicator extends AbstractHealthIndicator {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
index f50aca92..4ea8ea5c 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
@@ -16,6 +16,7 @@
package com.alibaba.cloud.nacos.discovery.configclient;
+import com.alibaba.cloud.nacos.NacosServiceAutoConfiguration;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
@@ -34,7 +35,7 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled", matchIfMissing = false)
@Configuration
@ImportAutoConfiguration({ NacosDiscoveryAutoConfiguration.class,
- NacosDiscoveryClientConfiguration.class })
+ NacosServiceAutoConfiguration.class, NacosDiscoveryClientConfiguration.class })
public class NacosDiscoveryClientConfigServiceBootstrapConfiguration {
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
index 9f88830e..b1aea417 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
@@ -36,7 +36,7 @@ import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
*
* @author xiaojing
*/
-@Endpoint(id = "nacos-discovery")
+@Endpoint(id = "nacosdiscovery")
public class NacosDiscoveryEndpoint {
private static final Logger log = LoggerFactory
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
index 0efd8642..9a79a568 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
@@ -41,6 +41,10 @@ import static org.springframework.util.ReflectionUtils.rethrowRuntimeException;
*/
public class NacosServiceRegistry implements ServiceRegistry {
+ private static final String STATUS_UP = "UP";
+
+ private static final String STATUS_DOWN = "DOWN";
+
private static final Logger log = LoggerFactory.getLogger(NacosServiceRegistry.class);
private final NacosDiscoveryProperties nacosDiscoveryProperties;
@@ -119,7 +123,8 @@ public class NacosServiceRegistry implements ServiceRegistry {
@Override
public void setStatus(Registration registration, String status) {
- if (!status.equalsIgnoreCase("UP") && !status.equalsIgnoreCase("DOWN")) {
+ if (!STATUS_UP.equalsIgnoreCase(status)
+ && !STATUS_DOWN.equalsIgnoreCase(status)) {
log.warn("can't support status {},please choose UP or DOWN", status);
return;
}
@@ -128,7 +133,7 @@ public class NacosServiceRegistry implements ServiceRegistry {
Instance instance = getNacosInstanceFromRegistration(registration);
- if (status.equalsIgnoreCase("DOWN")) {
+ if (STATUS_DOWN.equalsIgnoreCase(status)) {
instance.setEnabled(false);
}
else {
@@ -137,8 +142,8 @@ public class NacosServiceRegistry implements ServiceRegistry {
try {
Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties();
- nacosServiceManager.getNamingMaintainService(nacosProperties)
- .updateInstance(serviceId, instance);
+ nacosServiceManager.getNamingMaintainService(nacosProperties).updateInstance(
+ serviceId, nacosDiscoveryProperties.getGroup(), instance);
}
catch (Exception e) {
throw new RuntimeException("update nacos instance status fail", e);
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
index 8d705b04..82cdd317 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
@@ -28,7 +28,7 @@ import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.DynamicServerListLoadBalancer;
import com.netflix.loadbalancer.Server;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index e7381c30..0987e598 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -1,72 +1,72 @@
{"properties": [
- {
- "name": "spring.cloud.nacos.server-addr",
- "type": "java.lang.String",
- "defaultValue": "localhost:8848",
- "description": "nacos server address."
- },
- {
- "name": "spring.cloud.nacos.discovery.server-addr",
- "type": "java.lang.String",
- "defaultValue": "${spring.cloud.nacos.server-addr}",
- "description": "nacos discovery server address."
- },
- {
- "name": "spring.cloud.nacos.discovery.service",
- "type": "java.lang.String",
- "defaultValue": "${spring.application.name}",
- "description": "the service name to register, default value is ${spring.application.name}."
- },
- {
- "name": "spring.cloud.nacos.discovery.enabled",
- "type": "java.lang.Boolean",
- "defaultValue": true,
- "description": "enable nacos discovery or not."
- },
- {
- "name": "spring.cloud.nacos.discovery.instance-enabled",
- "type": "java.lang.Boolean",
- "defaultValue": true,
- "description": "If instance is enabled to accept request. The default value is true."
- },
- {
- "name": "spring.cloud.nacos.discovery.ephemeral",
- "type": "java.lang.Boolean",
- "defaultValue": true,
- "description": "If instance is ephemeral.The default value is true."
- },
- {
- "name": "spring.cloud.nacos.discovery.namingLoadCacheAtStart",
- "type": "java.lang.Boolean",
- "defaultValue": "false",
- "description": "naming load from local cache at application start ."
- },
- {
- "name": "spring.cloud.nacos.discovery.watch.enabled",
- "type": "java.lang.Boolean",
- "defaultValue": "true",
- "description": "enable nacos discovery watch or not ."
- },
- {
- "name": "spring.cloud.nacos.discovery.username",
- "type": "java.lang.String",
- "defaultValue": "${spring.cloud.nacos.username}",
- "description": "nacos discovery service's username to authenticate."
- },
- {
- "name": "spring.cloud.nacos.discovery.password",
- "type": "java.lang.String",
- "defaultValue": "${spring.cloud.nacos.password}",
- "description": "nacos discovery service's password to authenticate."
- },
- {
- "name": "spring.cloud.nacos.username",
- "type": "java.lang.String",
- "description": "nacos userName to authenticate."
- },
- {
- "name": "spring.cloud.nacos.password",
- "type": "java.lang.String",
- "description": "nacos password to authenticate."
- }
+ {
+ "name": "spring.cloud.nacos.server-addr",
+ "type": "java.lang.String",
+ "defaultValue": "localhost:8848",
+ "description": "nacos server address."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.server-addr",
+ "type": "java.lang.String",
+ "defaultValue": "${spring.cloud.nacos.server-addr}",
+ "description": "nacos discovery server address."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.service",
+ "type": "java.lang.String",
+ "defaultValue": "${spring.application.name}",
+ "description": "the service name to register, default value is ${spring.application.name}."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.enabled",
+ "type": "java.lang.Boolean",
+ "defaultValue": true,
+ "description": "enable nacos discovery or not."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.instance-enabled",
+ "type": "java.lang.Boolean",
+ "defaultValue": true,
+ "description": "If instance is enabled to accept request. The default value is true."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.ephemeral",
+ "type": "java.lang.Boolean",
+ "defaultValue": true,
+ "description": "If instance is ephemeral.The default value is true."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.namingLoadCacheAtStart",
+ "type": "java.lang.Boolean",
+ "defaultValue": "false",
+ "description": "naming load from local cache at application start ."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.watch.enabled",
+ "type": "java.lang.Boolean",
+ "defaultValue": "true",
+ "description": "enable nacos discovery watch or not ."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.username",
+ "type": "java.lang.String",
+ "defaultValue": "${spring.cloud.nacos.username}",
+ "description": "nacos discovery service's username to authenticate."
+ },
+ {
+ "name": "spring.cloud.nacos.discovery.password",
+ "type": "java.lang.String",
+ "defaultValue": "${spring.cloud.nacos.password}",
+ "description": "nacos discovery service's password to authenticate."
+ },
+ {
+ "name": "spring.cloud.nacos.username",
+ "type": "java.lang.String",
+ "description": "nacos userName to authenticate."
+ },
+ {
+ "name": "spring.cloud.nacos.password",
+ "type": "java.lang.String",
+ "description": "nacos password to authenticate."
+ }
]}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
index e2c189e2..fd1eca5d 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
@@ -4,7 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
- com.alibaba.cloud.nacos.NacosServiceAutoConfiguration,\
- com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
+ com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
+ com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java
new file mode 100644
index 00000000..be45b01d
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.nacos.registry;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Properties;
+
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.nacos.api.NacosFactory;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.MethodProxy;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
+
+/**
+ * @author L.cm
+ */
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore("javax.management.*")
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ NacosFactory.class })
+@SpringBootTest(classes = NacosRegistrationCustomizerTest.TestConfig.class, properties = {
+ "spring.application.name=myTestService1",
+ "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848" }, webEnvironment = RANDOM_PORT)
+public class NacosRegistrationCustomizerTest {
+
+ @Autowired
+ private NacosAutoServiceRegistration nacosAutoServiceRegistration;
+
+ static {
+ try {
+ Method method = PowerMockito.method(NacosFactory.class, "createNamingService",
+ Properties.class);
+ MethodProxy.proxy(method, new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ return new MockNamingService();
+ }
+ });
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void contextLoads() throws Exception {
+ NacosRegistration registration = nacosAutoServiceRegistration.getRegistration();
+ Map metadata = registration.getMetadata();
+ Assert.assertEquals("test1", metadata.get("test1"));
+ }
+
+ @Configuration
+ @EnableAutoConfiguration
+ @ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
+ public static class TestConfig {
+
+ @Bean
+ public NacosRegistrationCustomizer nacosRegistrationCustomizer() {
+ return registration -> {
+ Map metadata = registration.getMetadata();
+ metadata.put("test1", "test1");
+ };
+ }
+
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
index 2aa507bd..d0a1528b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
@@ -36,6 +36,7 @@ import io.seata.core.context.RootContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
@@ -156,11 +157,15 @@ public class SeataHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy
public K call() throws Exception {
try {
RequestContextHolder.setRequestAttributes(requestAttributes);
- RootContext.bind(xid);
+ if (!StringUtils.isEmpty(xid)) {
+ RootContext.bind(xid);
+ }
return actual.call();
}
finally {
- RootContext.unbind();
+ if (!StringUtils.isEmpty(xid)) {
+ RootContext.unbind();
+ }
RequestContextHolder.resetRequestAttributes();
}
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
index 6ddedb1b..f7ec7659 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
@@ -43,7 +43,6 @@ public class SeataHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) {
-
String xid = RootContext.getXID();
String rpcXid = request.getHeader(RootContext.KEY_XID);
if (log.isDebugEnabled()) {
@@ -56,6 +55,7 @@ public class SeataHandlerInterceptor implements HandlerInterceptor {
log.debug("bind {} to RootContext", rpcXid);
}
}
+
return true;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
index caa5afd2..a583874b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
@@ -19,7 +19,6 @@ package com.alibaba.cloud.sentinel.endpoint;
import com.alibaba.cloud.sentinel.SentinelProperties;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -36,7 +35,6 @@ public class SentinelEndpointAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
public SentinelEndpoint sentinelEndPoint(SentinelProperties sentinelProperties) {
return new SentinelEndpoint(sentinelProperties);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index 49b06b0d..97dd52e7 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -24,7 +24,8 @@
"defaultValue": true,
"description": "Specify whether unify web context(i.e. use the default context name), and is true by default."
},
- { "name": "spring.cloud.sentinel.transport.port",
+ {
+ "name": "spring.cloud.sentinel.transport.port",
"type": "java.lang.String",
"defaultValue": "8719",
"description": "sentinel api port."
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java
index fabccd12..eaf42639 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java
@@ -79,6 +79,7 @@ public class SidecarHealthChecker {
"Health check failed. unregister this instance. applicationName = {}, ip = {}, port = {}, status = {}",
applicationName, ip, port, status);
this.sidecarDiscoveryClient.deregisterInstance(applicationName, ip, port);
+
sidecarInstanceCacheMap.put(applicationName,
buildCache(ip, port, status));
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryClient.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryClient.java
index 86735833..d8229478 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryClient.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryClient.java
@@ -37,6 +37,7 @@ public class SidecarNacosDiscoveryClient implements SidecarDiscoveryClient {
public SidecarNacosDiscoveryClient(NacosServiceManager nacosServiceManager,
SidecarNacosDiscoveryProperties sidecarNacosDiscoveryProperties) {
+ this.nacosServiceManager = nacosServiceManager;
this.sidecarNacosDiscoveryProperties = sidecarNacosDiscoveryProperties;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryProperties.java
index a6c5a978..1a7a6d87 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosDiscoveryProperties.java
@@ -22,7 +22,6 @@ import com.alibaba.cloud.sidecar.SidecarProperties;
import org.springframework.util.StringUtils;
/**
- * @author itmuch.com
* @author yuhuangbin
*/
public class SidecarNacosDiscoveryProperties extends NacosDiscoveryProperties {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/pom.xml
index a4351c6c..34b013b7 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/pom.xml
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/pom.xml
@@ -3,8 +3,7 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-
+
com.alibaba.cloud
spring-cloud-alibaba-starters
${revision}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java
index 3415bcee..b4cc2d4a 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationAutoConfiguration.java
@@ -17,18 +17,25 @@
package com.alibaba.cloud.dubbo.autoconfigure;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.cloud.dubbo.autoconfigure.condition.MissingSpringCloudRegistryConfigPropertyCondition;
+import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapStartCommandLineRunner;
+import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapWrapper;
+import com.alibaba.cloud.dubbo.bootstrap.event.DubboBootstrapStartedEvent;
import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository;
import com.alibaba.cloud.dubbo.registry.DubboServiceRegistrationEventPublishingAspect;
+import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreDeregisteredEvent;
import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreRegisteredEvent;
import com.ecwid.consul.v1.agent.model.NewService;
import com.netflix.appinfo.InstanceInfo;
import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.config.spring.ServiceBean;
-import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,7 +49,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.serviceregistry.Registration;
+import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.cloud.consul.serviceregistry.ConsulRegistration;
+import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry;
@@ -63,9 +72,11 @@ import static org.springframework.util.ObjectUtils.isEmpty;
* Dubbo Service Registration Auto-{@link Configuration}.
*
* @author Mercy
+ * @author theonefx
*/
@Configuration
-@Import({ DubboServiceRegistrationEventPublishingAspect.class })
+@Import({ DubboServiceRegistrationEventPublishingAspect.class,
+ DubboBootstrapStartCommandLineRunner.class })
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
@AutoConfigureAfter(name = { EUREKA_CLIENT_AUTO_CONFIGURATION_CLASS_NAME,
CONSUL_AUTO_SERVICE_AUTO_CONFIGURATION_CLASS_NAME,
@@ -105,10 +116,42 @@ public class DubboServiceRegistrationAutoConfiguration {
return new RegistryConfig(ADDRESS, PROTOCOL);
}
+ private Map, Set> registrations = new ConcurrentHashMap<>();
+
+ @EventListener(DubboBootstrapStartedEvent.class)
+ public void onDubboBootstrapStarted(DubboBootstrapStartedEvent event) {
+ if (!event.getSource().isReady()) {
+ return;
+ }
+ registrations.forEach(
+ (registry, registrations) -> registrations.forEach(registration -> {
+ attachDubboMetadataServiceMetadata(registration);
+ registry.register(registration);
+ }));
+ }
+
@EventListener(ServiceInstancePreRegisteredEvent.class)
public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) {
Registration registration = event.getSource();
- attachDubboMetadataServiceMetadata(registration);
+ if (!DubboBootstrap.getInstance().isReady()
+ || !DubboBootstrap.getInstance().isStarted()) {
+ ServiceRegistry registry = event.getRegistry();
+ synchronized (registry) {
+ registrations.putIfAbsent(registry, new HashSet<>());
+ registrations.get(registry).add(registration);
+ }
+ }
+ else {
+ attachDubboMetadataServiceMetadata(registration);
+ }
+
+ }
+
+ @EventListener(ServiceInstancePreDeregisteredEvent.class)
+ public void onServiceInstancePreDeregistered(
+ ServiceInstancePreDeregisteredEvent event) {
+ ServiceRegistry registry = event.getRegistry();
+ registrations.remove(registry);
}
private void attachDubboMetadataServiceMetadata(Registration registration) {
@@ -131,21 +174,67 @@ public class DubboServiceRegistrationAutoConfiguration {
@Configuration
@ConditionalOnBean(name = EUREKA_CLIENT_AUTO_CONFIGURATION_CLASS_NAME)
- @Aspect
class EurekaConfiguration implements SmartInitializingSingleton {
@Autowired
private ObjectProvider> serviceBeans;
+ @EventListener(DubboBootstrapStartedEvent.class)
+ public void onDubboBootstrapStarted(DubboBootstrapStartedEvent event) {
+ DubboBootstrapWrapper wrapper = event.getSource();
+ if (!wrapper.isReady()) {
+ return;
+ }
+ registrations.forEach(
+ (registry, registrations) -> registrations.removeIf(registration -> {
+ if (!(registration instanceof EurekaRegistration)) {
+ return false;
+ }
+ EurekaRegistration eurekaRegistration = (EurekaRegistration) registration;
+ InstanceInfo instanceInfo = eurekaRegistration
+ .getApplicationInfoManager().getInfo();
+
+ EurekaInstanceConfigBean config = (EurekaInstanceConfigBean) eurekaRegistration
+ .getInstanceConfig();
+ config.setInitialStatus(InstanceInfo.InstanceStatus.UP);
+
+ attachDubboMetadataServiceMetadata(instanceInfo.getMetadata());
+ eurekaRegistration.getApplicationInfoManager()
+ .registerAppMetadata(instanceInfo.getMetadata());
+ eurekaRegistration.getApplicationInfoManager()
+ .setInstanceStatus(InstanceInfo.InstanceStatus.UP);
+ return true;
+ }));
+ }
+
@EventListener(ServiceInstancePreRegisteredEvent.class)
public void onServiceInstancePreRegistered(
ServiceInstancePreRegisteredEvent event) {
Registration registration = event.getSource();
- EurekaRegistration eurekaRegistration = EurekaRegistration.class
- .cast(registration);
- InstanceInfo instanceInfo = eurekaRegistration.getApplicationInfoManager()
- .getInfo();
- attachDubboMetadataServiceMetadata(instanceInfo.getMetadata());
+ if (!(registration instanceof EurekaRegistration)) {
+ return;
+ }
+
+ if (DubboBootstrap.getInstance().isReady()
+ && DubboBootstrap.getInstance().isStarted()) {
+ EurekaRegistration eurekaRegistration = (EurekaRegistration) registration;
+ InstanceInfo instanceInfo = eurekaRegistration.getApplicationInfoManager()
+ .getInfo();
+
+ EurekaInstanceConfigBean config = (EurekaInstanceConfigBean) eurekaRegistration
+ .getInstanceConfig();
+ config.setInitialStatus(InstanceInfo.InstanceStatus.UP);
+
+ attachDubboMetadataServiceMetadata(instanceInfo.getMetadata());
+ eurekaRegistration.getApplicationInfoManager()
+ .registerAppMetadata(instanceInfo.getMetadata());
+ }
+ else {
+ EurekaRegistration eurekaRegistration = (EurekaRegistration) registration;
+ EurekaInstanceConfigBean config = (EurekaInstanceConfigBean) eurekaRegistration
+ .getInstanceConfig();
+ config.setInitialStatus(InstanceInfo.InstanceStatus.STARTING);
+ }
}
/**
@@ -170,21 +259,28 @@ public class DubboServiceRegistrationAutoConfiguration {
@AutoConfigureOrder
class ConsulConfiguration {
- /**
- * Handle the pre-registered event of {@link ServiceInstance} for Consul.
- * @param event {@link ServiceInstancePreRegisteredEvent}
- */
- @EventListener(ServiceInstancePreRegisteredEvent.class)
- public void onServiceInstancePreRegistered(
- ServiceInstancePreRegisteredEvent event) {
- Registration registration = event.getSource();
- Class> registrationClass = AopUtils.getTargetClass(registration);
- String registrationClassName = registrationClass.getName();
- if (CONSUL_AUTO_SERVICE_AUTO_REGISTRATION_CLASS_NAME
- .equalsIgnoreCase(registrationClassName)) {
- ConsulRegistration consulRegistration = (ConsulRegistration) registration;
- attachURLsIntoMetadata(consulRegistration);
+ @EventListener(DubboBootstrapStartedEvent.class)
+ public void attachURLsIntoMetadataBeforeReRegist(
+ DubboBootstrapStartedEvent event) {
+ if (!event.getSource().isReady()) {
+ return;
}
+ registrations.entrySet().removeIf(entry -> {
+ Set registrations = entry.getValue();
+ registrations.removeIf(registration -> {
+ Class> registrationClass = AopUtils.getTargetClass(registration);
+ String registrationClassName = registrationClass.getName();
+ return !CONSUL_AUTO_SERVICE_AUTO_REGISTRATION_CLASS_NAME
+ .equalsIgnoreCase(registrationClassName);
+ });
+ return registrations.isEmpty();
+ });
+
+ registrations.forEach(
+ (registry, registrations) -> registrations.forEach(registration -> {
+ ConsulRegistration consulRegistration = (ConsulRegistration) registration;
+ attachURLsIntoMetadata(consulRegistration);
+ }));
}
private void attachURLsIntoMetadata(ConsulRegistration consulRegistration) {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java
index a7d19424..d0bb30df 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java
@@ -103,7 +103,7 @@ public class DubboServiceRegistrationNonWebApplicationAutoConfiguration {
*/
private void setServerPort() {
if (serverPort == null) {
- synchronized (this) {
+ synchronized (DubboServiceRegistrationNonWebApplicationAutoConfiguration.class) {
if (serverPort == null) {
for (List urls : repository.getAllExportedUrls().values()) {
urls.stream().filter(
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java
new file mode 100644
index 00000000..9f47bb2e
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapStartCommandLineRunner.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.dubbo.bootstrap;
+
+import com.alibaba.cloud.dubbo.bootstrap.event.DubboBootstrapStartedEvent;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * publish Dubbo microsystem startup finish event.
+ *
+ * @author theonefx
+ */
+
+@Component
+public class DubboBootstrapStartCommandLineRunner
+ implements CommandLineRunner, ApplicationEventPublisherAware {
+
+ private ApplicationEventPublisher applicationEventPublisher;
+
+ @Override
+ public void setApplicationEventPublisher(
+ ApplicationEventPublisher applicationEventPublisher) {
+ this.applicationEventPublisher = applicationEventPublisher;
+ }
+
+ @Override
+ public void run(String... args) {
+ applicationEventPublisher.publishEvent(
+ new DubboBootstrapStartedEvent(DubboBootstrapWrapper.getInstance()));
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java
new file mode 100644
index 00000000..60fcaf6a
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/DubboBootstrapWrapper.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.dubbo.bootstrap;
+
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+
+/**
+ * Wrapper DubboBootstrap operation.
+ *
+ * @author theonefx
+ */
+public final class DubboBootstrapWrapper {
+
+ private DubboBootstrapWrapper() {
+ }
+
+ private static final DubboBootstrapWrapper INSTANCE = new DubboBootstrapWrapper();
+
+ public static DubboBootstrapWrapper getInstance() {
+ return INSTANCE;
+ }
+
+ public boolean isReady() {
+ return DubboBootstrap.getInstance().isStarted()
+ && DubboBootstrap.getInstance().isReady()
+ && DubboBootstrap.getInstance().isInitialized();
+ }
+
+ public DubboBootstrap getDubboBootstrap() {
+ return DubboBootstrap.getInstance();
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java
new file mode 100644
index 00000000..3f14525c
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/bootstrap/event/DubboBootstrapStartedEvent.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.dubbo.bootstrap.event;
+
+import com.alibaba.cloud.dubbo.bootstrap.DubboBootstrapWrapper;
+
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * Dubbo microsytem start finish event, every thing is ready.
+ *
+ * @author theonefx
+ */
+public class DubboBootstrapStartedEvent extends ApplicationEvent {
+
+ /**
+ * Create a new {@code DubboBootstrapStartedEvent}.
+ * @param source the object on which the event initially occurred or with which the
+ * event is associated (never {@code null})
+ */
+ public DubboBootstrapStartedEvent(DubboBootstrapWrapper source) {
+ super(source);
+ }
+
+ @Override
+ public DubboBootstrapWrapper getSource() {
+ return (DubboBootstrapWrapper) super.getSource();
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java
index a2d3ea75..899229eb 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/http/matcher/AbstractHttpRequestMatcher.java
@@ -40,6 +40,7 @@ public abstract class AbstractHttpRequestMatcher implements HttpRequestMatcher {
*
* For example {@code " || "} for URL patterns or {@code " && "} for param
* expressions.
+ * @return str
*/
protected abstract String getToStringInfix();
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java
index f6434f3c..40d3bc68 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java
@@ -77,7 +77,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry {
/**
* Caches the IDs of {@link ApplicationListener}.
*/
- private static final Set registerListeners = new HashSet<>();
+ private static final Set REGISTER_LISTENERS = new HashSet<>();
protected final Logger logger = LoggerFactory.getLogger(getClass());
@@ -193,7 +193,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry {
private void registerServiceInstancesChangedEventListener(URL url,
NotifyListener listener) {
String listenerId = generateId(url);
- if (registerListeners.add(listenerId)) {
+ if (REGISTER_LISTENERS.add(listenerId)) {
applicationContext.addApplicationListener(
new ApplicationListener() {
@Override
@@ -261,7 +261,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry {
String listenerId = generateId(url);
// The metaservice will restart the new listener. It needs to be optimized
// to see whether the original listener can be reused.
- this.registerListeners.remove(listenerId);
+ REGISTER_LISTENERS.remove(listenerId);
}
/**
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java
index dbede698..be24b11f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java
@@ -83,7 +83,7 @@ public class DubboCloudRegistry extends FailbackRegistry {
/**
* Caches the IDs of {@link ApplicationListener}.
*/
- private static final Set registerListeners = new HashSet<>();
+ private static final Set REGISTER_LISTENERS = new HashSet<>();
protected final Logger logger = LoggerFactory.getLogger(getClass());
@@ -215,7 +215,7 @@ public class DubboCloudRegistry extends FailbackRegistry {
private void registerServiceInstancesChangedListener(URL url,
ApplicationListener listener) {
String listenerId = generateId(url);
- if (registerListeners.add(listenerId)) {
+ if (REGISTER_LISTENERS.add(listenerId)) {
applicationContext.addApplicationListener(listener);
}
}
@@ -290,7 +290,7 @@ public class DubboCloudRegistry extends FailbackRegistry {
.map(templateURL -> templateURL.removeParameter(PID_KEY))
.map(templateURL -> {
String protocol = templateURL.getProtocol();
- int port = repository.getDubboProtocolPort(serviceInstance,
+ Integer port = repository.getDubboProtocolPort(serviceInstance,
protocol);
if (Objects.equals(templateURL.getHost(), host)
&& Objects.equals(templateURL.getPort(), port)) { // use
@@ -300,15 +300,27 @@ public class DubboCloudRegistry extends FailbackRegistry {
return templateURL;
}
- URLBuilder clonedURLBuilder = from(templateURL) // remove the
- // parameters from
- // the template
- // URL
- .setHost(host) // reset the host
- .setPort(port); // reset the port
+ if (port == null) {
+ if (logger.isWarnEnabled()) {
+ logger.warn(
+ "The protocol[{}] port of Dubbo service instance[host : {}] "
+ + "can't be resolved",
+ protocol, host);
+ }
+ return null;
+ }
+ else {
+ URLBuilder clonedURLBuilder = from(templateURL) // remove the
+ // parameters from
+ // the template
+ // URL
+ .setHost(host) // reset the host
+ .setPort(port); // reset the port
- return clonedURLBuilder.build();
- }).forEach(clonedExportedURLs::add);
+ return clonedURLBuilder.build();
+ }
+
+ }).filter(Objects::nonNull).forEach(clonedExportedURLs::add);
});
return clonedExportedURLs;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java
index 43e679f5..8cd5c6b7 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboServiceRegistrationEventPublishingAspect.java
@@ -16,6 +16,7 @@
package com.alibaba.cloud.dubbo.registry;
+import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreDeregisteredEvent;
import com.alibaba.cloud.dubbo.registry.event.ServiceInstancePreRegisteredEvent;
import com.alibaba.cloud.dubbo.registry.event.ServiceInstanceRegisteredEvent;
import org.aspectj.lang.annotation.After;
@@ -33,6 +34,7 @@ import org.springframework.context.ApplicationEventPublisherAware;
* @author Mercy
* @see ServiceInstancePreRegisteredEvent
* @see ServiceInstanceRegisteredEvent
+ * @see ServiceInstancePreDeregisteredEvent
*/
@Aspect
public class DubboServiceRegistrationEventPublishingAspect
@@ -41,18 +43,29 @@ public class DubboServiceRegistrationEventPublishingAspect
/**
* The pointcut expression for {@link ServiceRegistry#register(Registration)}.
*/
- public static final String REGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(*)) && args(registration)";
+ public static final String REGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(*)) && target(registry) && args(registration)";
+
+ /**
+ * The pointcut expression for {@link ServiceRegistry#deregister(Registration)}.
+ */
+ public static final String DEREGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.deregister(*)) && target(registry) && args(registration)";
private ApplicationEventPublisher applicationEventPublisher;
- @Before(REGISTER_POINTCUT_EXPRESSION)
- public void beforeRegister(Registration registration) {
- applicationEventPublisher
- .publishEvent(new ServiceInstancePreRegisteredEvent(registration));
+ @Before(value = REGISTER_POINTCUT_EXPRESSION, argNames = "registry, registration")
+ public void beforeRegister(ServiceRegistry registry, Registration registration) {
+ applicationEventPublisher.publishEvent(
+ new ServiceInstancePreRegisteredEvent(registry, registration));
}
- @After(REGISTER_POINTCUT_EXPRESSION)
- public void afterRegister(Registration registration) {
+ @Before(value = DEREGISTER_POINTCUT_EXPRESSION, argNames = "registry, registration")
+ public void beforeDeregister(ServiceRegistry registry, Registration registration) {
+ applicationEventPublisher.publishEvent(
+ new ServiceInstancePreDeregisteredEvent(registry, registration));
+ }
+
+ @After(value = REGISTER_POINTCUT_EXPRESSION, argNames = "registry, registration")
+ public void afterRegister(ServiceRegistry registry, Registration registration) {
applicationEventPublisher
.publishEvent(new ServiceInstanceRegisteredEvent(registration));
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreDeregisteredEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreDeregisteredEvent.java
new file mode 100644
index 00000000..5e60be5b
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreDeregisteredEvent.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * 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
+ *
+ * https://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 com.alibaba.cloud.dubbo.registry.event;
+
+import org.springframework.cloud.client.serviceregistry.Registration;
+import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * The
+ * before-{@link org.springframework.cloud.client.serviceregistry.ServiceRegistry#register(org.springframework.cloud.client.serviceregistry.Registration)
+ * register} event for {@link org.springframework.cloud.client.ServiceInstance}.
+ *
+ * @author Mercy
+ */
+public class ServiceInstancePreDeregisteredEvent extends ApplicationEvent {
+
+ private final ServiceRegistry registry;
+
+ public ServiceInstancePreDeregisteredEvent(ServiceRegistry registry,
+ Registration source) {
+ super(source);
+ this.registry = registry;
+ }
+
+ @Override
+ public Registration getSource() {
+ return (Registration) super.getSource();
+ }
+
+ public ServiceRegistry getRegistry() {
+ return registry;
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java
index 4733fef6..e1b905c0 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/event/ServiceInstancePreRegisteredEvent.java
@@ -29,8 +29,12 @@ import org.springframework.context.ApplicationEvent;
*/
public class ServiceInstancePreRegisteredEvent extends ApplicationEvent {
- public ServiceInstancePreRegisteredEvent(Registration source) {
+ private final ServiceRegistry registry;
+
+ public ServiceInstancePreRegisteredEvent(ServiceRegistry registry,
+ Registration source) {
super(source);
+ this.registry = registry;
}
@Override
@@ -38,4 +42,8 @@ public class ServiceInstancePreRegisteredEvent extends ApplicationEvent {
return (Registration) super.getSource();
}
+ public ServiceRegistry getRegistry() {
+ return registry;
+ }
+
}