Skip to content

Commit 06cf0fc

Browse files
committed
update nonblocking
1 parent 230c8b4 commit 06cf0fc

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

server/src/main/java/dev/interview/server/ai/config/WebClientConfig.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,42 @@
11
package dev.interview.server.ai.config;
22

3+
import io.netty.channel.ChannelOption;
4+
import io.netty.handler.timeout.ReadTimeoutHandler;
5+
import io.netty.handler.timeout.WriteTimeoutHandler;
36
import org.springframework.context.annotation.Bean;
47
import org.springframework.context.annotation.Configuration;
58
import org.springframework.http.MediaType;
9+
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
610
import org.springframework.web.reactive.function.client.WebClient;
711
import org.springframework.http.HttpHeaders;
12+
import reactor.netty.http.client.HttpClient;
13+
import reactor.netty.resources.ConnectionProvider;
14+
15+
import java.time.Duration;
816

917
@Configuration
1018
public class WebClientConfig {
1119
@Bean
1220
public WebClient webClient(WebClient.Builder builder) {
21+
int maxConnections = 50;
22+
int maxIdleTime = 30; // 초
23+
24+
ConnectionProvider provider = ConnectionProvider.builder("fixed")
25+
.maxConnections(maxConnections)
26+
.maxIdleTime(Duration.ofSeconds(maxIdleTime)) // 유휴 커넥션 시간
27+
.build();
28+
29+
HttpClient httpClient = HttpClient.create()
30+
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)
31+
.responseTimeout(Duration.ofSeconds(5))
32+
.doOnConnected(conn ->
33+
conn.addHandlerLast(new ReadTimeoutHandler(5))
34+
.addHandlerLast(new WriteTimeoutHandler(5))
35+
);
36+
1337
return builder
1438
.baseUrl("http://localhost:6333")
39+
.clientConnector(new ReactorClientHttpConnector(httpClient))
1540
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // 수정된 부분
1641
.build();
1742
}

server/src/main/java/dev/interview/server/ai/service/RedisLockService.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package dev.interview.server.ai.service;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.springframework.data.redis.connection.RedisConnection;
5+
import org.springframework.data.redis.connection.RedisStringCommands;
46
import org.springframework.data.redis.core.RedisTemplate;
7+
import org.springframework.data.redis.core.types.Expiration;
58
import org.springframework.stereotype.Service;
69

710
import java.time.Duration;
@@ -12,7 +15,16 @@ public class RedisLockService {
1215
private final RedisTemplate<String, String> redisTemplate;
1316

1417
public boolean tryLock(String key, Duration timeout) {
15-
Boolean success = redisTemplate.opsForValue().setIfAbsent(key, "locked", timeout);
18+
// 밀리초 단위로 변환
19+
long timeoutMillis = timeout.toMillis();
20+
// Redis 명령어를 직접 실행하여 NX와 PX 옵션 설정
21+
Boolean success = redisTemplate.execute((RedisConnection connection) ->
22+
connection.set(
23+
key.getBytes(),
24+
"locked".getBytes(),
25+
Expiration.milliseconds(timeoutMillis),
26+
RedisStringCommands.SetOption.SET_IF_ABSENT)
27+
);
1628
return Boolean.TRUE.equals(success);
1729
}
1830

0 commit comments

Comments
 (0)