diff --git a/eclipse/checkstyle-suppressions.xml b/eclipse/checkstyle-suppressions.xml
index eda2bdc85c..b2e0b9ffbc 100644
--- a/eclipse/checkstyle-suppressions.xml
+++ b/eclipse/checkstyle-suppressions.xml
@@ -5,5 +5,7 @@
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 72c63cb936..66cbed9c83 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.springframework.cloud
spring-cloud-build
- 4.1.3
+ 4.3.0
@@ -80,13 +80,13 @@
- 2023.0.3.3
+ 2025.0.0.0
- 2023.0.3
+ 2025.0.0
- 3.2.9
+ 3.5.0
3.8.1
diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml
index 870669c2d7..661d1873cb 100644
--- a/spring-cloud-alibaba-dependencies/pom.xml
+++ b/spring-cloud-alibaba-dependencies/pom.xml
@@ -6,7 +6,7 @@
org.springframework.cloud
spring-cloud-dependencies-parent
- 4.1.0
+ 4.3.0
@@ -18,15 +18,16 @@
Spring Cloud Alibaba Dependencies
- 2023.0.3.3
+ 2025.0.0.0
1.8.8
- 2.4.2
- 2.1.0
+ 3.0.1
+ 2.3.0
- 5.3.1
+ 5.3.3
+ 5.3.2
- 4.23.0
+ 6.9.0
1.11.4
@@ -167,7 +168,7 @@
org.apache.rocketmq
rocketmq-acl
- ${rocketmq.version}
+ ${rocketmq.acl.version}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java
index 6856072472..290d33ab94 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java
@@ -25,7 +25,6 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.util.InetIPv6Utils;
-import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -149,7 +148,7 @@ private Response getInstanceResponse(Request> request,
.get("nacos.cluster");
return StringUtils.equals(cluster, clusterName);
}).collect(Collectors.toList());
- if (!CollectionUtils.isEmpty(sameClusterInstances)) {
+ if (!sameClusterInstances.isEmpty()) {
instancesToChoose = sameClusterInstances;
}
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java
index 969c2759bc..d91d02448f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java
@@ -18,10 +18,12 @@
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.Future;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.EventListener;
+import com.alibaba.nacos.api.naming.listener.FuzzyWatchEventWatcher;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ListView;
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
@@ -370,4 +372,35 @@ public void unsubscribe(String s, NamingSelector namingSelector, EventListener e
public void unsubscribe(String s, String s1, NamingSelector namingSelector, EventListener eventListener) throws NacosException {
}
+
+ @Override
+ public void fuzzyWatch(String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+
+ }
+
+ @Override
+ public void fuzzyWatch(String serviceNamePattern, String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+
+ }
+
+ @Override
+ public Future> fuzzyWatchWithServiceKeys(String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+ return null;
+ }
+
+ @Override
+ public Future> fuzzyWatchWithServiceKeys(String serviceNamePattern, String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+ return null;
+ }
+
+ @Override
+ public void cancelFuzzyWatch(String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+
+ }
+
+ @Override
+ public void cancelFuzzyWatch(String serviceNamePattern, String groupNamePattern, FuzzyWatchEventWatcher listener) throws NacosException {
+
+ }
+
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/BaseHttpInputMessage.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/BaseHttpInputMessage.java
new file mode 100644
index 0000000000..2133f9b18d
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/BaseHttpInputMessage.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2013-2023 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.sentinel.rest;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.util.Assert;
+
+
+public class BaseHttpInputMessage implements HttpInputMessage {
+
+ private final HttpHeaders headers = new HttpHeaders();
+ private final InputStream body;
+
+
+ /**
+ * Create a {@code MockHttpInputMessage} with the supplied body.
+ */
+ public BaseHttpInputMessage(byte[] body) {
+ Assert.notNull(body, "Byte array must not be null");
+ this.body = new ByteArrayInputStream(body);
+ }
+
+ /**
+ * Create a {@code MockHttpInputMessage} with the supplied body.
+ */
+ public BaseHttpInputMessage(InputStream body) {
+ Assert.notNull(body, "InputStream must not be null");
+ this.body = body;
+ }
+
+
+ @Override
+ public HttpHeaders getHeaders() {
+ return this.headers;
+ }
+
+ @Override
+ public InputStream getBody() throws IOException {
+ return this.body;
+ }
+
+}
+
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java
index be8c9cdba8..df239e4f28 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/rest/SentinelClientHttpResponse.java
@@ -16,66 +16,95 @@
package com.alibaba.cloud.sentinel.rest;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate;
-import com.alibaba.cloud.sentinel.custom.SentinelProtectInterceptor;
-
-import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.AbstractClientHttpResponse;
+import org.springframework.http.HttpStatusCode;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.util.Assert;
-/**
- * Using by {@link SentinelRestTemplate} and {@link SentinelProtectInterceptor}.
- *
- * @author Jim
- */
-public class SentinelClientHttpResponse extends AbstractClientHttpResponse {
- private String blockResponse = "RestTemplate request block by sentinel";
+public class SentinelClientHttpResponse extends BaseHttpInputMessage implements ClientHttpResponse {
+
+ private final HttpStatusCode statusCode;
+ private static final String BLOCK_RESPONSE = "RestTemplate request block by sentinel";
+ //private String blockResponse = BLOCK_RESPONSE;
+
+ /**
+ * Create a {@code SentinelMyClientHttpResponse} with an empty response body and
+ * HTTP status code {@link HttpStatus#OK OK}.
+ *
+ * @since 6.0.3
+ */
public SentinelClientHttpResponse() {
+ this(BLOCK_RESPONSE.getBytes(), HttpStatus.OK);
}
public SentinelClientHttpResponse(String blockResponse) {
- this.blockResponse = blockResponse;
+ this(blockResponse.getBytes(), HttpStatus.OK);
}
- @Override
- public int getRawStatusCode() throws IOException {
- return HttpStatus.OK.value();
+ /**
+ * Create a {@code SentinelMyClientHttpResponse} with response body as a byte array
+ * and the supplied HTTP status code.
+ */
+ public SentinelClientHttpResponse(byte[] body, HttpStatusCode statusCode) {
+ super(body);
+ Assert.notNull(statusCode, "HttpStatusCode must not be null");
+ this.statusCode = statusCode;
}
- @Override
- public String getStatusText() throws IOException {
- return blockResponse;
+ /**
+ * Create a {@code SentinelMyClientHttpResponse} with response body as a byte array
+ * and a custom HTTP status code.
+ *
+ * @since 5.3.17
+ */
+ public SentinelClientHttpResponse(byte[] body, int statusCode) {
+ this(body, HttpStatusCode.valueOf(statusCode));
}
+ /**
+ * Create a {@code SentinelMyClientHttpResponse} with response body as {@link InputStream}
+ * and the supplied HTTP status code.
+ */
+ public SentinelClientHttpResponse(InputStream body, HttpStatusCode statusCode) {
+ super(body);
+ Assert.notNull(statusCode, "HttpStatusCode must not be null");
+ this.statusCode = statusCode;
+ }
+
+ /**
+ * Create a {@code SentinelMyClientHttpResponse} with response body as {@link InputStream}
+ * and a custom HTTP status code.
+ *
+ * @since 5.3.17
+ */
+ public SentinelClientHttpResponse(InputStream body, int statusCode) {
+ this(body, HttpStatusCode.valueOf(statusCode));
+ }
+
+
@Override
- public void close() {
- // nothing do
+ public HttpStatusCode getStatusCode() {
+ return this.statusCode;
}
@Override
- public InputStream getBody() throws IOException {
- return new ByteArrayInputStream(blockResponse.getBytes());
+ public String getStatusText() {
+ return (this.statusCode instanceof HttpStatus status ? status.getReasonPhrase() : "");
}
@Override
- public HttpHeaders getHeaders() {
- Map> headers = new HashMap<>();
- headers.put(HttpHeaders.CONTENT_TYPE,
- Arrays.asList(MediaType.APPLICATION_JSON_VALUE));
- HttpHeaders httpHeaders = new HttpHeaders();
- httpHeaders.putAll(headers);
- return httpHeaders;
+ public void close() {
+ try {
+ getBody().close();
+ }
+ catch (IOException ex) {
+ // ignore
+ }
}
}