diff --git a/README-zh.md b/README-zh.md
index 373608c4b0..b1b3243d0c 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -15,7 +15,7 @@ Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。
## 主要功能
-* **服务限流降级**:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
+* **服务限流降级**:默认支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway、Zuul、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
* **服务注册与发现**:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
* **分布式配置管理**:支持分布式系统中的外部化配置,配置更改时自动刷新。
* **消息驱动能力**:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
@@ -56,7 +56,7 @@ Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。
Spring Cloud 使用 Maven 来构建,最快的使用方式是将本项目 clone 到本地,然后执行以下命令:
```bash
- ./mvnw install
+./mvnw install
```
执行完毕后,项目将被安装到本地 Maven 仓库。
@@ -66,17 +66,17 @@ Spring Cloud 使用 Maven 来构建,最快的使用方式是将本项目 clone
如果需要使用已发布的版本,在 `dependencyManagement` 中添加如下配置。
```xml
-
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- 2.2.5.RELEASE
- pom
- import
-
-
-
+
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ 2.2.6.RELEASE
+ pom
+ import
+
+
+
```
然后在 `dependencies` 中添加自己所需使用的依赖即可使用。
diff --git a/README.md b/README.md
index 559683cfef..5a5710833a 100644
--- a/README.md
+++ b/README.md
@@ -59,7 +59,7 @@ For more features please refer to [Roadmap](https://github.com/alibaba/spring-cl
Spring Cloud uses Maven for most build-related activities, and you should be able to get off the ground quite quickly by cloning the project you are interested in and typing:
```bash
- ./mvnw install
+./mvnw install
```
## How to Use
@@ -68,17 +68,17 @@ Spring Cloud uses Maven for most build-related activities, and you should be abl
These artifacts are available from Maven Central and Spring Release repository via BOM:
```xml
-
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- 2.2.5.RELEASE
- pom
- import
-
-
-
+
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ 2.2.6.RELEASE
+ pom
+ import
+
+
+
```
add the module in `dependencies`.
diff --git a/pom.xml b/pom.xml
index e636109895..8afbee1c02 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,18 +80,18 @@
- 2.2.6-SNAPSHOT
+ 2.2.7-SNAPSHOT
Hoxton.SR9
- 2.7.8
+ 2.7.13
4.0.1
+ 2.0.4
4.6.1
- 2.0.2
3.7.0
diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml
index 1adf679d2b..e56436134f 100644
--- a/spring-cloud-alibaba-dependencies/pom.xml
+++ b/spring-cloud-alibaba-dependencies/pom.xml
@@ -18,10 +18,10 @@
Spring Cloud Alibaba Dependencies
- 2.2.6-SNAPSHOT
+ 2.2.7-SNAPSHOT
1.8.1
1.3.0
- 1.4.2
+ 2.0.3
0.8.0
1.0.10
diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc
index 2bbfa7a633..96ef58716e 100644
--- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc
+++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc
@@ -348,13 +348,7 @@ Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置
* B: 通过 `spring.cloud.nacos.config.ext-config[n].data-id` 的方式支持多个扩展 Data Id 的配置
* C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
-当三种方式共同使用时,他们的一个优先级关系是:
-
-->A为优先级最高的
-
-->B的优先级低于A,
-
-->C的优先级是最低的
+当三种方式共同使用时,他们的一个优先级关系是: A < B < C
=== Nacos Config 对外暴露的 Endpoint
diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc
index 340da4d8b1..7823c649ff 100644
--- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc
+++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/rocketmq.adoc
@@ -249,6 +249,11 @@ spring.cloud.stream.rocketmq.binder.customized-trace-topic::
消息轨迹开启后存储的 topic 名称。
+
Default: `RMQ_SYS_TRACE_TOPIC`.
++
+spring.cloud.stream.rocketmq.binder.access-channel::
+商业版rocketmq消息轨迹topic自适应,值为CLOUD
++
+Default: null.
==== RocketMQ Consumer Properties
@@ -346,6 +351,7 @@ NOTE: 0.1.2 & 0.2.2 & 0.9.0 才支持该功能
spring.cloud.stream.rocketmq.binder.access-key=YourAccessKey
spring.cloud.stream.rocketmq.binder.secret-key=YourSecretKey
spring.cloud.stream.rocketmq.binder.name-server=NameServerInMQ
+spring.cloud.stream.rocketmq.binder.access-channel=CLOUD
```
NOTE: topic 和 group 请以 实例id% 为前缀进行配置。比如 topic 为 "test",需要配置成 "实例id%test"
diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc
index 305813e8f4..4362375d92 100644
--- a/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc
+++ b/spring-cloud-alibaba-docs/src/main/asciidoc/rocketmq.adoc
@@ -246,7 +246,11 @@ spring.cloud.stream.rocketmq.binder.customized-trace-topic::
The trace topic for message trace.
+
Default: `RMQ_SYS_TRACE_TOPIC`.
-
++
+spring.cloud.stream.rocketmq.binder.access-channel::
+The commercial version of rocketmq message trajectory topic is adaptive,the value is CLOUD
++
+Default: null.
==== RocketMQ Consumer Properties
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java
index 4827aebf17..6722f8bbae 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java
@@ -53,6 +53,7 @@
import static com.alibaba.nacos.api.PropertyKeyConst.MAX_RETRY;
import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
import static com.alibaba.nacos.api.PropertyKeyConst.PASSWORD;
+import static com.alibaba.nacos.api.PropertyKeyConst.RAM_ROLE_NAME;
import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY;
import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
import static com.alibaba.nacos.api.PropertyKeyConst.USERNAME;
@@ -202,6 +203,11 @@ private void overrideFromEnv() {
*/
private String secretKey;
+ /**
+ * access key for namespace.
+ */
+ private String ramRoleName;
+
/**
* context path for nacos config server.
*/
@@ -356,6 +362,14 @@ public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
+ public String getRamRoleName() {
+ return ramRoleName;
+ }
+
+ public void setRamRoleName(String ramRoleName) {
+ this.ramRoleName = ramRoleName;
+ }
+
public String getEncode() {
return encode;
}
@@ -548,6 +562,7 @@ public Properties assembleConfigServiceProperties() {
properties.put(NAMESPACE, Objects.toString(this.namespace, ""));
properties.put(ACCESS_KEY, Objects.toString(this.accessKey, ""));
properties.put(SECRET_KEY, Objects.toString(this.secretKey, ""));
+ properties.put(RAM_ROLE_NAME, Objects.toString(this.ramRoleName, ""));
properties.put(CLUSTER_NAME, Objects.toString(this.clusterName, ""));
properties.put(MAX_RETRY, Objects.toString(this.maxRetry, ""));
properties.put(CONFIG_LONG_POLL_TIMEOUT,
@@ -560,8 +575,7 @@ public Properties assembleConfigServiceProperties() {
int index = endpoint.indexOf(":");
properties.put(ENDPOINT, endpoint.substring(0, index));
properties.put(ENDPOINT_PORT, endpoint.substring(index + 1));
- }
- else {
+ } else {
properties.put(ENDPOINT, endpoint);
}
@@ -597,6 +611,7 @@ public String toString() {
+ ", enableRemoteSyncConfig=" + enableRemoteSyncConfig + ", endpoint='"
+ endpoint + '\'' + ", namespace='" + namespace + '\'' + ", accessKey='"
+ accessKey + '\'' + ", secretKey='" + secretKey + '\''
+ + ", ramRoleName='" + ramRoleName + '\''
+ ", contextPath='" + contextPath + '\'' + ", clusterName='" + clusterName
+ '\'' + ", name='" + name + '\'' + '\'' + ", shares=" + sharedConfigs
+ ", extensions=" + extensionConfigs + ", refreshEnabled="
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 22a7f67663..181c6b455f 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
@@ -35,6 +35,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
import org.springframework.context.ApplicationEventPublisher;
@@ -45,8 +46,9 @@
/**
* @author xiaojing
* @author yuhuangbin
+ * @author pengfei.lu
*/
-public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
+public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle, DisposableBean {
private static final Logger log = LoggerFactory.getLogger(NacosWatch.class);
@@ -199,4 +201,8 @@ public void nacosServicesWatch() {
}
+ @Override
+ public void destroy() {
+ this.stop();
+ }
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
index 3692414f42..af9110d336 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
@@ -40,7 +40,8 @@
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = NacosRibbonClientPropertyOverrideTests.TestConfiguration.class,
- properties = { "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848",
+ properties = { "spring.cloud.nacos.server-addr=127.0.0.1:8848",
+ "spring.cloud.nacos.username=nacos", "spring.cloud.nacos.password=nacos",
"spring.cloud.nacos.discovery.port=18080",
"spring.cloud.nacos.discovery.service=remoteApp",
"localApp.ribbon.NIWSServerListClassName="
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/CustomHealthCheckHandler.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/CustomHealthCheckHandler.java
new file mode 100644
index 0000000000..69598f1c06
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/CustomHealthCheckHandler.java
@@ -0,0 +1,26 @@
+/*
+ * 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.sidecar;
+
+/**
+ * @author yuhuangbin
+ */
+public interface CustomHealthCheckHandler {
+
+ void handler(String applicationName, SidecarInstanceInfo sidecarInstanceInfo);
+
+}
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 eaf4263927..e5673aaa89 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
@@ -25,6 +25,8 @@
import org.slf4j.LoggerFactory;
import reactor.core.scheduler.Schedulers;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.core.env.ConfigurableEnvironment;
@@ -37,7 +39,7 @@ public class SidecarHealthChecker {
private static final Logger log = LoggerFactory.getLogger(SidecarHealthChecker.class);
- private final Map sidecarInstanceCacheMap = new ConcurrentHashMap<>();
+ private final Map sidecarInstanceCacheMap = new ConcurrentHashMap<>();
private final SidecarDiscoveryClient sidecarDiscoveryClient;
@@ -47,6 +49,9 @@ public class SidecarHealthChecker {
private final ConfigurableEnvironment environment;
+ @Autowired
+ private ObjectProvider customHealthCheckHandlerObjectProvider;
+
public SidecarHealthChecker(SidecarDiscoveryClient sidecarDiscoveryClient,
HealthIndicator healthIndicator, SidecarProperties sidecarProperties,
ConfigurableEnvironment environment) {
@@ -64,9 +69,10 @@ public void check() {
Status status = healthIndicator.health().getStatus();
- instanceCache(applicationName, ip, port, status);
+ SidecarInstanceInfo sidecarInstanceInfo = instanceCache(applicationName, ip,
+ port, status);
if (status.equals(Status.UP)) {
- if (needRegister(applicationName, ip, port, status)) {
+ if (needRegister(applicationName, sidecarInstanceInfo)) {
this.sidecarDiscoveryClient.registerInstance(applicationName, ip,
port);
log.info(
@@ -84,30 +90,37 @@ public void check() {
buildCache(ip, port, status));
}
+ try {
+ customHealthCheckHandlerObjectProvider
+ .ifAvailable(customHealthCheckHandler -> customHealthCheckHandler
+ .handler(applicationName, sidecarInstanceInfo));
+ }
+ catch (Exception e) {
+ // ignore
+ }
}, 0, sidecarProperties.getHealthCheckInterval(), TimeUnit.MILLISECONDS);
}
- private void instanceCache(String applicationName, String ip, Integer port,
- Status status) {
- sidecarInstanceCacheMap.putIfAbsent(applicationName,
- buildCache(ip, port, status));
+ private SidecarInstanceInfo instanceCache(String applicationName, String ip,
+ Integer port, Status status) {
+ SidecarInstanceInfo sidecarInstanceInfo = buildCache(ip, port, status);
+ sidecarInstanceCacheMap.putIfAbsent(applicationName, sidecarInstanceInfo);
+ return sidecarInstanceInfo;
}
- private boolean needRegister(String applicationName, String ip, Integer port,
- Status status) {
- SidecarInstanceCache cacheRecord = sidecarInstanceCacheMap.get(applicationName);
- SidecarInstanceCache cache = buildCache(ip, port, status);
-
- if (!Objects.equals(cache, cacheRecord)) {
+ private boolean needRegister(String applicationName,
+ SidecarInstanceInfo sidecarInstanceInfo) {
+ SidecarInstanceInfo cacheRecord = sidecarInstanceCacheMap.get(applicationName);
+ if (!Objects.equals(sidecarInstanceInfo, cacheRecord)) {
// modify the cache info
- sidecarInstanceCacheMap.put(applicationName, cache);
+ sidecarInstanceCacheMap.put(applicationName, sidecarInstanceInfo);
return true;
}
return false;
}
- private SidecarInstanceCache buildCache(String ip, Integer port, Status status) {
- SidecarInstanceCache cache = new SidecarInstanceCache();
+ private SidecarInstanceInfo buildCache(String ip, Integer port, Status status) {
+ SidecarInstanceInfo cache = new SidecarInstanceInfo();
cache.setIp(ip);
cache.setPort(port);
cache.setStatus(status);
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceCache.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceInfo.java
similarity index 94%
rename from spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceCache.java
rename to spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceInfo.java
index 0c18f1aa43..14892268ac 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceCache.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarInstanceInfo.java
@@ -23,7 +23,7 @@
/**
* @author yuhuangbin
*/
-public class SidecarInstanceCache {
+public class SidecarInstanceInfo {
private String ip;
@@ -63,7 +63,7 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
- SidecarInstanceCache that = (SidecarInstanceCache) o;
+ SidecarInstanceInfo that = (SidecarInstanceInfo) o;
return Objects.equals(ip, that.ip) && Objects.equals(port, that.port)
&& Objects.equals(status, that.status);
}