From b118ce407153c17599a9717e383bad6abdb41129 Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Tue, 13 May 2025 19:14:34 +0900 Subject: [PATCH] =?UTF-8?q?DropBox=20=EC=B2=98=EB=A6=AC=20=EC=93=B0?= =?UTF-8?q?=EB=A0=88=EB=93=9C=20=EC=88=98=20=EC=84=A4=EC=A0=95=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20Postman=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=20=EC=93=B0=EB=A0=88=EB=93=9C=20=EC=88=98=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8F=99?= =?UTF-8?q?=EC=8B=9C=20=EB=AF=B8=EC=B2=98=EB=A6=AC=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20bsm-lab/dfxagent#8=20alive=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EB=A1=9C=EC=A7=81=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=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 --- src/docs/script/startup.sh | 2 +- .../dfxagent-bd-test-cubrid-local.json | 8 +++-- .../dfx/agent/config/AgentConfigDto.java | 10 +++++- .../dfx/agent/config/AgentConfigReader.java | 2 +- .../dfx/agent/config/BeanInitializer.java | 10 +----- .../agent/config/DfxAgentConfiguration.java | 23 +++---------- .../dfx/agent/config/StartupRunner.java | 16 ++++++--- .../dfx/agent/event/ContextReadyListener.java | 22 ------------- .../agent/listener/ListenerController.java | 2 +- ...vice.java => DropBoxSchedulerService.java} | 27 +-------------- .../agent/task/dropbox/DropBoxService.java | 33 +++++++++++++++++++ 11 files changed, 70 insertions(+), 85 deletions(-) rename src/main/java/com/bsmlab/dfx/agent/task/dropbox/{DropBoxTaskExecutorService.java => DropBoxSchedulerService.java} (89%) diff --git a/src/docs/script/startup.sh b/src/docs/script/startup.sh index d937d27..fdb2ad1 100644 --- a/src/docs/script/startup.sh +++ b/src/docs/script/startup.sh @@ -1,4 +1,4 @@ #!/bin/sh AGENT_HOME=/home/dfxagent/agent TODAY=$(date "+%Y%m%d") -java -jar $AGENT_HOME/lib/dfxagent.jar --setting.file=$AGENT_HOME/conf/settings.json & \ No newline at end of file +java -jar $AGENT_HOME/lib/dfxagent.jar -Xms2048m -Xmx8192m --setting.file=$AGENT_HOME/conf/settings.json & \ No newline at end of file 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 0da80b9..26c41fc 100644 --- a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json +++ b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json @@ -44,6 +44,8 @@ "receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received", "processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed", "failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure", + "threadPoolSize": 300, + "retentionDaysOfProcessedMessage": 60, "dropBoxList": [ { "dropBoxId": "db-bd-cubrid-save", @@ -53,6 +55,8 @@ } ] }, - "postman": [ - ] + "postmanConfig": { + "threadPoolSize": 30, + "postmanList": [] + } } diff --git a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java index 12be142..36f9be9 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java @@ -15,7 +15,7 @@ public class AgentConfigDto { private List dataSourceConfig; private List sqlMapperLocations; private DropBoxConfig dropBox; - private List postman; + private PostmanConfig postmanConfig; private LoggingConfig logging; @@ -48,6 +48,8 @@ public class AgentConfigDto { private String processedMessageStorageRoot; private String failureMessageStorageRoot; private List dropBoxList; + private int threadPoolSize; + private int retentionDaysOfProcessedMessage; } @Data @@ -59,6 +61,12 @@ public class AgentConfigDto { private String saveDirectoryRoot; } + @Data + public static class PostmanConfig { + private int threadPoolSize; + private List postmanList; + } + @Data public static class Postman { private String postmanId; diff --git a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigReader.java b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigReader.java index 04aad7f..16d8c0d 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigReader.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigReader.java @@ -72,7 +72,7 @@ public class AgentConfigReader { public List getScheduledTypePostmanList() { List postmanList = null; - for(AgentConfigDto.Postman postman : this.agentConfigDto.getPostman()) { + for(AgentConfigDto.Postman postman : this.agentConfigDto.getPostmanConfig().getPostmanList()) { if(AgentConfigDto.ActionType.SCHEDULED == postman.getAction().getType()) { if(postmanList == null) { postmanList = new ArrayList<>(); diff --git a/src/main/java/com/bsmlab/dfx/agent/config/BeanInitializer.java b/src/main/java/com/bsmlab/dfx/agent/config/BeanInitializer.java index 39bb63b..35e8884 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/BeanInitializer.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/BeanInitializer.java @@ -7,9 +7,6 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; -import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService; -import com.bsmlab.dfx.agent.task.dropbox.DropBoxTaskExecutorService; -import com.bsmlab.dfx.agent.task.postman.PostmanSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.slf4j.LoggerFactory; @@ -24,17 +21,12 @@ import java.util.Map; @Component @RequiredArgsConstructor public class BeanInitializer implements SmartInitializingSingleton { - private final DfxAgentConfiguration dfxAgentConfiguration; - private final DynamicDataSourceService dynamicDataSourceService; - private final PostmanSchedulerService postmanSchedulerService; - private final DropBoxTaskExecutorService dropBoxTaskExecutorService; private final AgentConfigReader agentConfigReader; @Override public void afterSingletonsInstantiated() { - System.out.println("πŸ”₯ BeanInitializer afterSingletonsInstantiated() μ§„μž…!"); - log.info("βœ… BeanInitializer μž‘λ™ 확인"); this.configureLogback(); + log.info("βœ… logger μ„€μ • μ™„λ£Œ"); } private void configureLogback() { 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 456c14c..06fd756 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/DfxAgentConfiguration.java @@ -179,35 +179,22 @@ public class DfxAgentConfiguration { return dynamicDataSourceService; } - // (μˆ˜μ‹  처리) λ©”μ‹œμ§€ μˆ˜μ‹  - μ €μž₯ ν›„ μˆ˜μ‹  λ©”μ‹œμ§€ 처리 μ“°λ ˆλ“œ μ„€μ • - @Bean(name = "dropBoxProcessorThreadPoolTaskExecutor") - public ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor() { - ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor = new ThreadPoolTaskExecutor(); - dropBoxProcessorThreadPoolTaskExecutor.setCorePoolSize(30); // μ΅œμ†Œ μ“°λ ˆλ“œ - dropBoxProcessorThreadPoolTaskExecutor.setMaxPoolSize(300); // μ΅œλŒ€ μ“°λ ˆλ“œ - dropBoxProcessorThreadPoolTaskExecutor.setQueueCapacity(300); // λŒ€κΈ° 큐 - dropBoxProcessorThreadPoolTaskExecutor.setThreadNamePrefix("dropBoxProcessor-"); - dropBoxProcessorThreadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); // μ’…λ£Œ μ‹œ λŒ€κΈ° μ—¬λΆ€ - dropBoxProcessorThreadPoolTaskExecutor.initialize(); - return dropBoxProcessorThreadPoolTaskExecutor; - } - // (μˆ˜μ‹  처리) λ©”μ‹œμ§€ μˆ˜μ‹  - μ €μž₯ ν›„ μˆ˜μ‹  λ©”μ‹œμ§€ 처리 μ“°λ ˆλ“œ μ„€μ • @Bean(name = "dropBoxProcessorThreadPoolTaskScheduler") - public ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler() { + public ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler(AgentConfigReader agentConfigReader) { ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - dropBoxProcessorThreadPoolTaskScheduler.setPoolSize(300); + dropBoxProcessorThreadPoolTaskScheduler.setPoolSize(agentConfigReader.getAgentConfigDto().getDropBox().getThreadPoolSize()); dropBoxProcessorThreadPoolTaskScheduler.setThreadNamePrefix("dropBoxProcessor-"); dropBoxProcessorThreadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); // μ’…λ£Œ μ‹œ λŒ€κΈ° μ—¬λΆ€ dropBoxProcessorThreadPoolTaskScheduler.initialize(); return dropBoxProcessorThreadPoolTaskScheduler; } - // (솑신 처리) λ©”μ‹œμ§€ 솑신 μ“°λ ˆλ“œ μ„€μ •(μ‚­μ œ μ˜ˆμ •) + // (솑신 처리) λ©”μ‹œμ§€ 솑신 μ“°λ ˆλ“œ μ„€μ • @Bean(name = "scheduledPostmanThreadPoolTaskScheduler") - public ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler() { // 싀행확인됨 + public ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler(AgentConfigReader agentConfigReader) { // 싀행확인됨 ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - scheduledPostmanThreadPoolTaskScheduler.setPoolSize(10); + scheduledPostmanThreadPoolTaskScheduler.setPoolSize(agentConfigReader.getAgentConfigDto().getPostmanConfig().getThreadPoolSize()); scheduledPostmanThreadPoolTaskScheduler.setThreadNamePrefix("postman-scheduler-"); scheduledPostmanThreadPoolTaskScheduler.initialize(); return scheduledPostmanThreadPoolTaskScheduler; diff --git a/src/main/java/com/bsmlab/dfx/agent/config/StartupRunner.java b/src/main/java/com/bsmlab/dfx/agent/config/StartupRunner.java index a2a7900..2530b8b 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/StartupRunner.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/StartupRunner.java @@ -1,7 +1,8 @@ package com.bsmlab.dfx.agent.config; import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService; -import com.bsmlab.dfx.agent.task.dropbox.DropBoxTaskExecutorService; +import com.bsmlab.dfx.agent.task.dropbox.DropBoxService; +import com.bsmlab.dfx.agent.task.dropbox.DropBoxSchedulerService; import com.bsmlab.dfx.agent.task.postman.PostmanSchedulerService; import com.bsmlab.dfx.agent.task.status.StatusCheckerSchedulerService; import lombok.RequiredArgsConstructor; @@ -17,22 +18,29 @@ public class StartupRunner implements ApplicationRunner { private final DfxAgentConfiguration dfxAgentConfiguration; private final DynamicDataSourceService dynamicDataSourceService; private final PostmanSchedulerService postmanSchedulerService; - private final DropBoxTaskExecutorService dropBoxTaskExecutorService; + private final DropBoxSchedulerService dropBoxSchedulerService; private final StatusCheckerSchedulerService statusCheckerSchedulerService; + private final DropBoxService dropBoxService; @Override public void run(ApplicationArguments args) throws Exception { - log.debug("βœ… StartupRunner start [run]"); + log.info("βœ… StartupRunner 기동"); // DfxAgentConfiguration μ—μ„œ μƒμ„±ν•œ 빈 쀑 DataSource κ΄€λ ¨ 섀정을 λ§ˆλ¬΄λ¦¬ν•œλ‹€. dynamicDataSourceService.setSqlSessionFactoryMap(dfxAgentConfiguration.getTemporarySqlSessionFactoryMap()); dynamicDataSourceService.setTransactionManagerMap(dfxAgentConfiguration.getTemporaryTransactionManagerMap()); //4. Worker μ“°λ ˆλ“œ 생성 // 솑신 λ©”μ‹œμ§€ 전솑 μ„œλΉ„μŠ€ + log.info("βœ… PostmanSchedulerService 기동"); postmanSchedulerService.launch(); // μˆ˜μ‹ ν•œ λ©”μ‹œμ§€ 처리 μ„œλΉ„μŠ€ - dropBoxTaskExecutorService.launch(); + log.info("βœ… DropBoxTaskExecutorService 기동"); + dropBoxSchedulerService.launch(); // λ‹€λ₯Έ agent μƒνƒœ 확인 μ„œλΉ„μŠ€ + log.info("βœ… StatusCheckerSchedulerService 기동"); statusCheckerSchedulerService.launch(); + // receivedMessageStorageRoot ν•˜μœ„μ— μ²˜λ¦¬λ˜μ§€ μ•Šμ€ λ©”μ‹œμ§€λ₯Ό 처리 queue에 λ„£λŠ”λ‹€. + int messageCount = dropBoxService.addNotProcessedMessageFile(); + log.info("βœ… 미처리 λ©”μ‹œμ§€ 체크 - {} 건 처리 등둝", messageCount); log.debug("βœ… StartupRunner end"); } } diff --git a/src/main/java/com/bsmlab/dfx/agent/event/ContextReadyListener.java b/src/main/java/com/bsmlab/dfx/agent/event/ContextReadyListener.java index 56750ea..a8038f2 100644 --- a/src/main/java/com/bsmlab/dfx/agent/event/ContextReadyListener.java +++ b/src/main/java/com/bsmlab/dfx/agent/event/ContextReadyListener.java @@ -1,9 +1,5 @@ package com.bsmlab.dfx.agent.event; -import com.bsmlab.dfx.agent.config.DfxAgentConfiguration; -import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService; -import com.bsmlab.dfx.agent.task.dropbox.DropBoxTaskExecutorService; -import com.bsmlab.dfx.agent.task.postman.PostmanSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; @@ -14,28 +10,10 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class ContextReadyListener implements ApplicationListener { - private final DfxAgentConfiguration dfxAgentConfiguration; - private final DynamicDataSourceService dynamicDataSourceService; - private final PostmanSchedulerService postmanSchedulerService; - private final DropBoxTaskExecutorService dropBoxTaskExecutorService; @Override public void onApplicationEvent(ContextRefreshedEvent event) { - System.out.println("πŸ”₯ ContextReadyListener onApplicationEvent() μ§„μž…!"); log.info("βœ… ContextReadyListener μž‘λ™ 확인"); - /* - // DfxAgentConfiguration μ—μ„œ μƒμ„±ν•œ 빈 쀑 DataSource κ΄€λ ¨ 섀정을 λ§ˆλ¬΄λ¦¬ν•œλ‹€. - dynamicDataSourceService.setSqlSessionFactoryMap(dfxAgentConfiguration.getTemporarySqlSessionFactoryMap()); - dynamicDataSourceService.setTransactionManagerMap(dfxAgentConfiguration.getTemporaryTransactionManagerMap()); - - // PostmanSchedulerService, DropBoxTaskExecutorService λŠ” @RequiredArgsConstructor 이기 λ•Œλ¬Έμ— μžλ™μœΌλ‘œ injection λœλ‹€ - // κ·Έ ν›„ @PostConstruct 둜직이 싀행될 것이닀. - log.debug("ContextReadyListener onApplicationEvent [run]"); - log.debug("{} ready", postmanSchedulerService.getClass().getName()); - log.debug("{} ready", dropBoxTaskExecutorService.getClass().getName()); - //TODO 4. Worker μ“°λ ˆλ“œ 생성 - - */ } diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java b/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java index 10c8144..8e6936c 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java @@ -71,7 +71,7 @@ public class ListenerController { AckDto ackDto; try { String bodyString= ServletUtils.getBodyString(request); - ackDto = listenerService.receiveAck(bodyString); + ackDto = listenerService.receiveCommand(bodyString); } catch (IOException e) { ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText(e.getLocalizedMessage()).messageUuid("").build(); } diff --git a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java similarity index 89% rename from src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java rename to src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java index 85e9ea8..2a4745e 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxTaskExecutorService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java @@ -14,10 +14,7 @@ import org.apache.commons.lang3.EnumUtils; import org.springframework.http.HttpEntity; 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; @@ -27,7 +24,6 @@ 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; @@ -35,8 +31,7 @@ import java.util.concurrent.ScheduledFuture; @Service @RequiredArgsConstructor @Slf4j -public class DropBoxTaskExecutorService { - private final ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor; +public class DropBoxSchedulerService { private final ThreadPoolTaskScheduler dropBoxProcessorThreadPoolTaskScheduler; private final AgentConfigReader agentConfigReader; private final SqlExecuteService sqlExecuteService; @@ -48,7 +43,6 @@ public class DropBoxTaskExecutorService { * @param messageFilePath λ©”μ§€μ‹œ 파일 μ ˆλŒ€ 경둜 */ @SuppressWarnings("unchecked") -// @Async("dropBoxProcessorThreadPoolTaskExecutor") public void processDropBox(String messageFilePath) { ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().build(); ReceiveMessageDto.ProcessStatus processStatus; @@ -176,28 +170,9 @@ public class DropBoxTaskExecutorService { } } - 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()); - String messageFilePath = dropBoxService.poll(); - if(StringUtils.isNotBlank(messageFilePath)) { - this.processDropBox(messageFilePath); - } - Thread.sleep(10); - } catch (InterruptedException e) { - log.error("{}", e, e); - Thread.currentThread().interrupt(); - } - }; - for(int i = 0; i < this.dropBoxProcessorThreadPoolTaskExecutor.getCorePoolSize(); i++) { - this.dropBoxProcessorThreadPoolTaskExecutor.execute(runnable); - } - */ } } diff --git a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java index fa3d407..e8501b8 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java @@ -13,7 +13,9 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; @Service @@ -75,6 +77,37 @@ public class DropBoxService { } } + /** + * 기동 μ‹œ ν˜ΈμΆœν•¨. μˆ˜μ‹ ν•˜μ˜€μœΌλ‚˜ μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ λ©”μ‹œμ§€ νŒŒμΌμ„ μ°Ύμ•„μ„œ 처리 queue 에 λ„£λŠ”λ‹€. + */ + public int addNotProcessedMessageFile() { + File root = new File(agentConfigReader.getAgentConfigDto().getDropBox().getReceivedMessageStorageRoot()); + List fileList = new ArrayList<>(); + this.findAndAddMessageFile(root, fileList); + for(File file : fileList) { + this.queue.add(file.getAbsolutePath()); + } + return fileList.size(); + } + + private void findAndAddMessageFile(File parentDirectory, List fileList) { + File[] filesOnDirectory = parentDirectory.listFiles(); + if(filesOnDirectory != null) { + for(File file : filesOnDirectory) { + if(file.canRead() && !".".equals(file.getName()) && !"..".equals(file.getName())) { + if(file.isFile()) { + if(!this.queue.contains(file.getAbsolutePath())) { + fileList.add(file); + } + } + else if(file.isDirectory()) { + findAndAddMessageFile(file, fileList); + } + } + } + } + } + /** * κ³΅μœ λ©”λͺ¨λ¦¬(queue)의 파일 경둜λ₯Ό νšλ“ν•œλ‹€. * @return ReceiveMessageDto의 serialize 파일 경둜