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); + } + }