Browse Source

fix: rsponse가 필요 없는 경우 async사용하여 병렬 처리

feature/socket
지대한 7 months ago
parent
commit
d6a8d6effe
  1. 6
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java
  2. 44
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AsyncConfig.java
  3. 7
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java
  4. 7
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java

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

44
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;
}
}

7
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)

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

Loading…
Cancel
Save