From 57a45a0496cece2f88695ddb6eb952054b97c89c Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Mon, 12 May 2025 20:27:24 +0900 Subject: [PATCH] =?UTF-8?q?dropBoxProcessorThreadPoolTaskExecutor=EB=A5=BC?= =?UTF-8?q?=2010ms=20=EB=8B=A8=EC=9C=84=EC=9D=98=20Scheduler=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=99=84=EB=A3=8C=20(ThreadPoolTaskScheduler?= =?UTF-8?q?.scheduleWithFixedDelay)=20=20-=20=EC=82=AC=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=86=8C=EC=8A=A4=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EC=97=AC=EC=95=BC=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit alive 메시지 로직 확인하여야 함 --- .../dfxagent-bd-test-cubrid-local.json | 2 +- .../agent/config/DfxAgentConfiguration.java | 13 +++++++++- .../dropbox/DropBoxTaskExecutorService.java | 24 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json index 45bc6bb..0da80b9 100644 --- a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json +++ b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json @@ -11,7 +11,7 @@ } ], "statusChecker": { - "cron": "0 0/10 * * * *" + "cron": "2 0/1 * * * *" }, "dataSourceConfig": [ { diff --git a/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java b/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java index c2ae54a..456c14c 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java @@ -192,7 +192,18 @@ public class DfxAgentConfiguration { return dropBoxProcessorThreadPoolTaskExecutor; } - // (송신 처리) 메시지 송신 쓰레드 설정 + // (수신 처리) 메시지 수신 - 저장 후 수신 메시지 처리 쓰레드 설정 + @Bean(name = "dropBoxProcessorThreadPoolTaskScheduler") + public ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler() { + ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler = new ThreadPoolTaskScheduler(); + dropBoxProcessorThreadPoolTaskScheduler.setPoolSize(300); + dropBoxProcessorThreadPoolTaskScheduler.setThreadNamePrefix("dropBoxProcessor-"); + dropBoxProcessorThreadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); // 종료 시 대기 여부 + dropBoxProcessorThreadPoolTaskScheduler.initialize(); + return dropBoxProcessorThreadPoolTaskScheduler; + } + + // (송신 처리) 메시지 송신 쓰레드 설정(삭제 예정) @Bean(name = "scheduledPostmanThreadPoolTaskScheduler") public ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler() { // 실행확인됨 ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler = new ThreadPoolTaskScheduler(); diff --git a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java index fffc239..85e9ea8 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java @@ -16,6 +16,8 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Service; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @@ -24,14 +26,18 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; +import java.time.Duration; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ScheduledFuture; @Service @RequiredArgsConstructor @Slf4j public class DropBoxTaskExecutorService { private final ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor; + private final ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler; private final AgentConfigReader agentConfigReader; private final SqlExecuteService sqlExecuteService; private final DropBoxService dropBoxService; @@ -156,8 +162,25 @@ public class DropBoxTaskExecutorService { } } + private void run() { + try { + String messageFilePath = dropBoxService.poll(); + if(StringUtils.isNotBlank(messageFilePath)) { + log.info("dropBoxProcessThread {} process a message {}", Thread.currentThread().getName(), messageFilePath); + this.processDropBox(messageFilePath); + } + Thread.sleep(10); + } catch (InterruptedException e) { + log.error("{}", e, e); + Thread.currentThread().interrupt(); + } + } + + public void launch() { // 실행확인됨 log.debug("{} launch", this.getClass().getName()); + ScheduledFuture scheduledFuture = dropBoxProcessorThreadPoolTaskScheduler.scheduleWithFixedDelay(this::run, Duration.ofMillis(10)); + /* Runnable runnable = () -> { try { log.info("dropBoxProcessThread run {}", Thread.currentThread().getName()); @@ -174,6 +197,7 @@ public class DropBoxTaskExecutorService { for(int i = 0; i < this.dropBoxProcessorThreadPoolTaskExecutor.getCorePoolSize(); i++) { this.dropBoxProcessorThreadPoolTaskExecutor.execute(runnable); } + */ } }