From d6a8d6effe6ccb6a57d20116992392d54128d5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 6 Mar 2024 11:56:37 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20rsponse=EA=B0=80=20=ED=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20async=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EB=B3=91=EB=A0=AC=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/impl/SandboxDroneCommandImpl.java | 6 ++- .../kac/socket/core/config/AsyncConfig.java | 44 +++++++++++++++++++ .../kac/socket/service/KacAppService.java | 7 +++ .../kac/socket/service/WebSocketService.java | 7 ++- 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AsyncConfig.java diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java index 72b0e5b..e1bc4a2 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java @@ -119,14 +119,16 @@ public class SandboxDroneCommandImpl implements DroneCommand { DronStorage dronStorage = DronStorage.getInstance(); dronStorage.add(dron); */ - kacAppService.sendData(drone); +// kacAppService.sendData(drone); + kacAppService.asyncSendData(drone); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } // STEP 3. 화면에 표출할 정보 WebSocket 전달 try { - webSocketService.sendData(drone); +// webSocketService.sendData(drone); + webSocketService.asyncSendData(drone); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AsyncConfig.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AsyncConfig.java new file mode 100644 index 0000000..7e2129a --- /dev/null +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AsyncConfig.java @@ -0,0 +1,44 @@ +package kr.co.palnet.kac.socket.core.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; + +@Slf4j +@EnableAsync +@Configuration +public class AsyncConfig implements AsyncConfigurer { + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(10); + executor.setMaxPoolSize(50); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("th-async-default-"); + executor.initialize(); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (ex, method, params) -> log.error("ERROR : {}", ex.getMessage(), ex); + } + + @Bean + public Executor restClientThreadPoolTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(10); + executor.setMaxPoolSize(100); + executor.setQueueCapacity(500); + executor.setThreadNamePrefix("th-async-rc-"); + executor.initialize(); + return executor; + } + +} diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java index b49a7c2..88c3f83 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; @@ -45,6 +46,12 @@ public class KacAppService { .toBodilessEntity(); } + // 비동기 + @Async("restClientThreadPoolTaskExecutor") + public void asyncSendData(DroneDto dto) { + sendData(dto); + } + private RestClient getRestClient() { return RestClient.builder() .baseUrl(kacAppHost) diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java index d7a11f1..618b135 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java @@ -6,8 +6,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; @@ -36,5 +36,10 @@ public class WebSocketService { .toBodilessEntity(); } + @Async + public void asyncSendData(DroneDto dto) { + sendData(dto); + } + }