Skip to content

Commit 3067300

Browse files
committed
feat: support set timeout before call api
1 parent 40dec93 commit 3067300

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

src/main/java/com/netease/nim/im/server/sdk/core/YunxinHttpClient.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.netease.nim.im.server.sdk.core.metrics.Stats;
1212
import com.netease.nim.im.server.sdk.core.metrics.YunxinApiSdkMetricsCollector;
1313
import com.netease.nim.im.server.sdk.core.trace.ApiVersion;
14+
import com.netease.nim.im.server.sdk.core.trace.TimeoutSetter;
1415
import com.netease.nim.im.server.sdk.core.trace.YunxinTraceId;
1516
import com.netease.nim.im.server.sdk.core.trace.TraceIdUtils;
1617
import com.netease.nim.im.server.sdk.core.utils.CheckSumBuilder;
@@ -99,6 +100,9 @@ public HttpResponse execute(HttpMethod method, ContextType contextType, ApiVersi
99100
if (maxRetry > 128) {
100101
maxRetry = 128;
101102
}
103+
Long timeoutMillis = TimeoutSetter.getAndClear();
104+
OkHttpClient client = client(timeoutMillis);
105+
102106
for (int i=0; i<=maxRetry; i++) {
103107
//request
104108
Request.Builder builder = new Request.Builder();
@@ -118,7 +122,7 @@ public HttpResponse execute(HttpMethod method, ContextType contextType, ApiVersi
118122
logger.debug("execute, endpoint = {}, method = {}, contextType = {}, apiVersion= {}, uri = {}, traceId = {}",
119123
endpoint, method, contextType, apiVersion, uri, traceId);
120124
}
121-
try (Response response = okHttpClient.newCall(request).execute()) {
125+
try (Response response = client.newCall(request).execute()) {
122126
int code = response.code();
123127
String string = response.body().string();
124128
if (code != 200) {
@@ -185,6 +189,17 @@ public HttpResponse execute(HttpMethod method, ContextType contextType, ApiVersi
185189
}
186190
}
187191

192+
private OkHttpClient client(Long timeoutMillis) {
193+
if (timeoutMillis == null) {
194+
return okHttpClient;
195+
}
196+
return okHttpClient.newBuilder()
197+
.connectTimeout(timeoutMillis, TimeUnit.MILLISECONDS)
198+
.readTimeout(timeoutMillis, TimeUnit.MILLISECONDS)
199+
.writeTimeout(timeoutMillis, TimeUnit.MILLISECONDS)
200+
.build();
201+
}
202+
188203
@Override
189204
public Stats getStats() {
190205
if (metricsCollector == null) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.netease.nim.im.server.sdk.core.trace;
2+
3+
4+
/**
5+
* Created by caojiajun on 2025/2/10
6+
*/
7+
public class TimeoutSetter {
8+
9+
private static final ThreadLocal<Long> timeout = new ThreadLocal<>();
10+
11+
public static Long getAndClear() {
12+
Long timeoutMillis = timeout.get();
13+
timeout.remove();
14+
return timeoutMillis;
15+
}
16+
17+
public static void setTimeout(long timeoutMillis) {
18+
timeout.set(timeoutMillis);
19+
}
20+
21+
}

src/main/java/com/netease/nim/im/server/sdk/core/version/YunxinApiSdkVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
*/
66
public class YunxinApiSdkVersion {
77

8-
public static final String version = "0.1.0";
8+
public static final String version = "0.2.0-SNAPSHOT";
99
}

0 commit comments

Comments
 (0)