dropBoxProcessorThreadPoolTaskExecutor를 10ms 단위의 Scheduler로 변경하여야 함 (ThreadPoolTaskScheduler.scheduleWithFixedDelay)

main
semin.baek 8 months ago
parent e0ea8cff19
commit b28274da17

@ -22,7 +22,7 @@ configurations {
repositories { repositories {
mavenCentral() mavenCentral()
maven { maven {
url 'https://maven.cubrid.org' url = 'https://maven.cubrid.org'
} }
} }
/* /*

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
AGENT_HOME=/home/dfxagent/agent AGENT_HOME=/home/dfxagent/agent
TODAY=$(date "+%Y%m%d") TODAY=$(date "+%Y%m%d")
java -jar $AGENT_HOME/lib/dfxagent.jar --setting.file=$AGENT_HOME/conf/settings.json > $AGENT_HOME/logs/agent.$TODAY.log & java -jar $AGENT_HOME/lib/dfxagent.jar --setting.file=$AGENT_HOME/conf/settings.json &

@ -35,7 +35,8 @@
"packages": [ "packages": [
{ {
"com.bsmlab.dfx.agent": "DEBUG", "com.bsmlab.dfx.agent": "DEBUG",
"jdbc.sqlonly": "DEBUG" "jdbc.sqlonly": "DEBUG",
"org.springframework": "INFO"
} }
] ]
}, },

@ -23,7 +23,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
@ -32,7 +31,6 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.StandardOpenOption; import java.nio.file.StandardOpenOption;
import java.util.*; import java.util.*;
import java.util.concurrent.Executor;
@Slf4j @Slf4j
@Getter @Getter
@ -183,7 +181,7 @@ public class DfxAgentConfiguration {
// (수신 처리) 메시지 수신 - 저장 후 수신 메시지 처리 쓰레드 설정 // (수신 처리) 메시지 수신 - 저장 후 수신 메시지 처리 쓰레드 설정
@Bean(name = "dropBoxProcessorThreadPoolTaskExecutor") @Bean(name = "dropBoxProcessorThreadPoolTaskExecutor")
public Executor dropBoxProcessorThreadPoolTaskExecutor() { public ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor = new ThreadPoolTaskExecutor();
dropBoxProcessorThreadPoolTaskExecutor.setCorePoolSize(30); // 최소 쓰레드 dropBoxProcessorThreadPoolTaskExecutor.setCorePoolSize(30); // 최소 쓰레드
dropBoxProcessorThreadPoolTaskExecutor.setMaxPoolSize(300); // 최대 쓰레드 dropBoxProcessorThreadPoolTaskExecutor.setMaxPoolSize(300); // 최대 쓰레드

@ -15,6 +15,7 @@ import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -30,6 +31,7 @@ import java.util.Map;
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class DropBoxTaskExecutorService { public class DropBoxTaskExecutorService {
private final ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor;
private final AgentConfigReader agentConfigReader; private final AgentConfigReader agentConfigReader;
private final SqlExecuteService sqlExecuteService; private final SqlExecuteService sqlExecuteService;
private final DropBoxService dropBoxService; private final DropBoxService dropBoxService;
@ -40,7 +42,7 @@ public class DropBoxTaskExecutorService {
* @param messageFilePath * @param messageFilePath
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Async("dropBoxProcessorThreadPoolTaskExecutor") // @Async("dropBoxProcessorThreadPoolTaskExecutor")
public void processDropBox(String messageFilePath) { public void processDropBox(String messageFilePath) {
ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().build(); ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().build();
ReceiveMessageDto.ProcessStatus processStatus; ReceiveMessageDto.ProcessStatus processStatus;
@ -155,18 +157,22 @@ public class DropBoxTaskExecutorService {
} }
public void launch() { // 실행확인됨 public void launch() { // 실행확인됨
log.debug("{} @PostConstruct Run", this.getClass().getName()); log.debug("{} launch", this.getClass().getName());
while(true) { Runnable runnable = () -> {
try { try {
Thread.sleep(10); log.info("dropBoxProcessThread run {}", Thread.currentThread().getName());
String messageFilePath = dropBoxService.poll(); String messageFilePath = dropBoxService.poll();
if(StringUtils.isNotBlank(messageFilePath)) { if(StringUtils.isNotBlank(messageFilePath)) {
this.processDropBox(messageFilePath); this.processDropBox(messageFilePath);
} }
Thread.sleep(10);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("{}", e, e); log.error("{}", e, e);
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
};
for(int i = 0; i < this.dropBoxProcessorThreadPoolTaskExecutor.getCorePoolSize(); i++) {
this.dropBoxProcessorThreadPoolTaskExecutor.execute(runnable);
} }
} }

@ -58,7 +58,7 @@ public class PostmanSchedulerService {
} }
public void launch() { // 실행확인됨 public void launch() { // 실행확인됨
log.debug("{} @PostConstruct Run", this.getClass().getName()); log.info("{} launch", this.getClass().getName());
List<AgentConfigDto.Postman> postmanList = agentConfigReader.getScheduledTypePostmanList(); List<AgentConfigDto.Postman> postmanList = agentConfigReader.getScheduledTypePostmanList();
if(postmanList != null) { if(postmanList != null) {
for(AgentConfigDto.Postman postman : postmanList) { for(AgentConfigDto.Postman postman : postmanList) {

@ -4,8 +4,6 @@ import com.bsmlab.dfx.agent.config.AgentConfigDto;
import com.bsmlab.dfx.agent.config.AgentConfigReader; import com.bsmlab.dfx.agent.config.AgentConfigReader;
import com.bsmlab.dfx.agent.listener.dto.AckDto; import com.bsmlab.dfx.agent.listener.dto.AckDto;
import com.bsmlab.dfx.agent.listener.dto.CommandDto; import com.bsmlab.dfx.agent.listener.dto.CommandDto;
import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto;
import com.bsmlab.dfx.agent.support.exception.DfxException;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -19,7 +17,6 @@ import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;

Loading…
Cancel
Save