Skip to content

Commit b5dd3dc

Browse files
author
zhangxin
committed
修复close阻塞
1 parent 6d7259a commit b5dd3dc

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

java/src/main/java/com/baidubce/appbuilder/base/utils/http/HttpClient.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,10 @@
55
import com.baidubce.appbuilder.base.exception.AppBuilderServerException;
66
import com.baidubce.appbuilder.base.utils.iterator.StreamIterator;
77
import com.baidubce.appbuilder.base.utils.json.JsonUtils;
8-
9-
import java.io.IOException;
10-
import java.lang.reflect.Type;
11-
import java.net.URLEncoder;
12-
import java.util.Iterator;
13-
import java.util.LinkedHashMap;
14-
import java.util.Map;
15-
import java.util.concurrent.TimeUnit;
16-
import java.util.logging.ConsoleHandler;
17-
import java.util.logging.Level;
18-
import java.util.logging.FileHandler;
19-
import java.util.logging.Logger;
20-
8+
import org.apache.hc.client5.http.classic.methods.HttpDelete;
219
import org.apache.hc.client5.http.classic.methods.HttpGet;
2210
import org.apache.hc.client5.http.classic.methods.HttpPost;
23-
import org.apache.hc.client5.http.classic.methods.HttpDelete;
11+
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
2412
import org.apache.hc.client5.http.config.RequestConfig;
2513
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2614
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
@@ -31,6 +19,17 @@
3119
import org.apache.hc.core5.http.ParseException;
3220
import org.apache.hc.core5.http.io.entity.EntityUtils;
3321

22+
import java.io.IOException;
23+
import java.lang.reflect.Type;
24+
import java.net.URLEncoder;
25+
import java.util.LinkedHashMap;
26+
import java.util.Map;
27+
import java.util.concurrent.TimeUnit;
28+
import java.util.logging.ConsoleHandler;
29+
import java.util.logging.FileHandler;
30+
import java.util.logging.Level;
31+
import java.util.logging.Logger;
32+
3433
public class HttpClient {
3534
public String SecretKey;
3635
public String Gateway;
@@ -169,11 +168,11 @@ public ClassicHttpRequest createGetRequestV2(String url, Map<String, Object> map
169168
return httpGet;
170169
}
171170

172-
public ClassicHttpRequest createDeleteRequestV2(String url, Map<String, Object> map) {
171+
public ClassicHttpRequest createDeleteRequestV2(String url, Map<String, Object> map) {
173172
// 处理查询参数
174173
String urlParams = toQueryString(map);
175174
// 如果 URL 已经包含 '?', 不需要再添加
176-
String requestURL = GatewayV2 + ConsoleOpenAPIPrefix + ConsoleOpenAPIVersion + url
175+
String requestURL = GatewayV2 + ConsoleOpenAPIPrefix + ConsoleOpenAPIVersion + url
177176
+ (url.contains("?") ? "&" : "?") + urlParams;
178177

179178
LOGGER.log(Level.FINE, "requestURL: " + requestURL);
@@ -222,10 +221,10 @@ public <T> HttpResponse<T> execute(ClassicHttpRequest request, Type bodyType)
222221
});
223222
if (httpResponse.getCode() != 200) {
224223
String errorMessage = String.format(
225-
"Error after processing response with code %d for request ID: %s, message: %s",
226-
httpResponse.getCode(),
227-
httpResponse.getRequestId(),
228-
httpResponse.getMessage()
224+
"Error after processing response with code %d for request ID: %s, message: %s",
225+
httpResponse.getCode(),
226+
httpResponse.getRequestId(),
227+
httpResponse.getMessage()
229228
);
230229
LOGGER.log(Level.SEVERE, errorMessage);
231230
throw new AppBuilderServerException(httpResponse.getRequestId(), httpResponse.getCode(),
@@ -256,7 +255,7 @@ public <T> HttpResponse<StreamIterator<T>> executeSSE(ClassicHttpRequest request
256255
}
257256
return new HttpResponse<StreamIterator<T>>().setCode(resp.getCode())
258257
.setMessage(resp.getReasonPhrase()).setRequestId(requestId).setHeaders(headers)
259-
.setBody(new StreamIterator<>(resp, bodyType));
258+
.setBody(new StreamIterator<>(resp, bodyType, (HttpUriRequestBase) request));
260259
}
261260

262261
private String toQueryString(Map<String, Object> map) {

java/src/main/java/com/baidubce/appbuilder/base/utils/iterator/StreamIterator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.baidubce.appbuilder.base.utils.iterator;
22

33
import com.baidubce.appbuilder.base.utils.json.JsonUtils;
4+
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
45
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
56

67
import java.io.BufferedReader;
@@ -14,12 +15,14 @@ public class StreamIterator<T> implements Iterator<T>, AutoCloseable {
1415
private final CloseableHttpResponse resp;
1516
private final BufferedReader reader;
1617
private final Type bodyType;
18+
private final HttpUriRequestBase cancellable;
1719
private String nextLine;
1820

19-
public StreamIterator(CloseableHttpResponse resp, Type type) throws IOException {
21+
public StreamIterator(CloseableHttpResponse resp, Type type, HttpUriRequestBase cancellable) throws IOException {
2022
this.resp = resp;
2123
this.reader = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
2224
this.bodyType = type;
25+
this.cancellable = cancellable;
2326
}
2427

2528
@Override
@@ -57,6 +60,9 @@ public T next() {
5760

5861
@Override
5962
public void close() {
63+
if (cancellable != null) {
64+
cancellable.abort();
65+
}
6066
try {
6167
if (reader != null) {
6268
reader.close();

0 commit comments

Comments
 (0)