DropBox(메시지 처리) 진행중

- 송신 부분 설계중
main
semin.baek 10 months ago
parent 97ad14ae68
commit 208fc51e85

@ -1,8 +1,6 @@
{
"who-am-i": {
"host-id": "first-agent",
"listen-port": 16801
},
"listen-port": 16801,
"known-agent": [
{
"host-id": "second-agent",
@ -52,13 +50,35 @@
{
"postman-id": "postman1",
"task-type": "DB_READ_THEN_SEND",
"action": {
"type": "TRIGGER",
"command": "runSelectSomeThenSend",
"parameters-key-list": ["REG_DATE_FROM", "REG_DATE_TO"]
},
"message": {
"message-type": "SAVE_DB_DATA",
"dataSourceId": "dfcms",
"sql-id": "dfcms.selectSome"
},
"recipient-host-id": "third-agent",
"recipient-drop-box-id": "drop3",
"routing-host-id-list": ["first-agent", "second-agent", "third-agent"]
},
{
"postman-id": "postman2",
"task-type": "DB_READ_THEN_SEND",
"action": {
"type": "SCHEDULED",
"cron": "1 0 3 * * *"
},
"message": {
"message-type": "SAVE_DB_DATA",
"dataSourceId": "dfcms",
"sql-id": "dfcms.selectSome"
},
"recipient-host-id": "third-agent",
"recipient-drop-box-id": "drop3"
"recipient-drop-box-id": "drop3",
"routing-host-id-list": ["first-agent", "second-agent", "third-agent"]
}
]
}

@ -2,6 +2,7 @@ package com.bsmlab.dfx.agent.config;
import com.bsmlab.dfx.agent.config.datasource.DataSourceDto;
import com.bsmlab.dfx.agent.task.dropbox.DropBoxDto;
import com.bsmlab.dfx.agent.task.postman.PostmanDto;
import com.fasterxml.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
@ -25,11 +26,15 @@ public class Settings {
private String messageStorageRootPath;
private Map<String, DropBoxDto> dropBoxDtoMap = new HashMap<>();
private Resource[] mapperLocations;
private int listenPort = 12345;
private Map<String, PostmanDto> postmanDtoMap;
public void loadSettingFile(String settingFilePath) {
try {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> settingMap = objectMapper.readValue(new File(settingFilePath), Map.class);
this.mapperLocations = this.createMapperLocations(settingMap);
this.listenPort = (Integer)settingMap.get("listen-port");
log.debug("settingMap: {}", settingMap);
this.parseDataSources(settingMap);
this.parseDropBoxes(settingMap);
@ -77,7 +82,6 @@ public class Settings {
messageStorageRootFile.mkdirs();
}
List<Map<String, String>> dropBoxMapList = (List<Map<String, String>>)dropBoxSettingMap.get("drop-box-list");
//TODO drop-box executor 개발 -> ListenerController
for(Map<String, String> dropBoxMap : dropBoxMapList) {
DropBoxDto dropBoxDto = DropBoxDto.builder()
.dropBoxId(dropBoxMap.get("drop-box-id")).taskType(dropBoxMap.get("task-type"))
@ -88,6 +92,14 @@ public class Settings {
}
}
private void parsePostman(Map<String, Object> settingMap) {
Map<String, PostmanDto> postmanDtoMap = new HashMap<>();
Map<String, Object> postmanSettingMap = (Map<String, Object>)settingMap.get("postman");
}
public Resource[] getMapperLocations() {
return this.mapperLocations;
}
@ -107,4 +119,8 @@ public class Settings {
public DropBoxDto getDropBoxDto(String dropBoxId) {
return this.dropBoxDtoMap.get(dropBoxId);
}
public int getListenPort() {
return this.listenPort;
}
}

@ -0,0 +1,20 @@
package com.bsmlab.dfx.agent.config;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@RequiredArgsConstructor
public class WebServerCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
private final Settings settings;
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
int port = settings.getListenPort();
factory.setPort(port);
factory.setContextPath("/");
}
}

@ -0,0 +1,6 @@
package com.bsmlab.dfx.agent.config.constant;
public enum ActionType {
TRIGGER,
SCHEDULED
}

@ -0,0 +1,5 @@
package com.bsmlab.dfx.agent.config.constant;
public enum TaskType {
DB_READ_THEN_SEND
}

@ -1,14 +1,12 @@
package com.bsmlab.dfx.agent.task;
import com.bsmlab.dfx.agent.config.Settings;
import com.bsmlab.dfx.agent.config.constant.MessageType;
import com.bsmlab.dfx.agent.config.datasource.SqlExecuteService;
import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto;
import com.bsmlab.dfx.agent.task.dropbox.DropBoxDto;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.EnumUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@ -24,7 +22,7 @@ public class TaskExecutorService {
private final SqlExecuteService sqlExecuteService;
@Async("threadPoolTaskExecutor")
public void process(String messageFilePath) {
public void processDropBox(String messageFilePath) {
try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(messageFilePath))) {
ReceiveMessageDto receiveMessageDto = (ReceiveMessageDto)objectInputStream.readObject();
DropBoxDto dropBoxDto = settings.getDropBoxDto(receiveMessageDto.getRecipientDropBoxId());
@ -49,4 +47,9 @@ public class TaskExecutorService {
throw new RuntimeException(e);
}
}
@Async("threadPoolTaskExecutor")
public void processPostman() {
}
}

@ -1,5 +1,6 @@
package com.bsmlab.dfx.agent.task;
import com.bsmlab.dfx.agent.config.Settings;
import com.bsmlab.dfx.agent.task.dropbox.DropBoxService;
import io.micrometer.common.util.StringUtils;
import jakarta.annotation.PostConstruct;
@ -13,6 +14,7 @@ import org.springframework.stereotype.Component;
public class TaskExecutorStarter {
private final DropBoxService dropBoxService;
private final TaskExecutorService taskExecutorService;
private final Settings settings;
@PostConstruct
public void run() {
@ -21,7 +23,7 @@ public class TaskExecutorStarter {
Thread.sleep(10);
String messageFilePath = dropBoxService.poll();
if(StringUtils.isNotBlank(messageFilePath)) {
taskExecutorService.process(messageFilePath);
taskExecutorService.processDropBox(messageFilePath);
}
} catch (InterruptedException e) {
log.error("{}", e, e);

@ -0,0 +1,35 @@
package com.bsmlab.dfx.agent.task.postman;
import com.bsmlab.dfx.agent.config.constant.ActionType;
import com.bsmlab.dfx.agent.config.constant.MessageType;
import com.bsmlab.dfx.agent.config.constant.TaskType;
import lombok.Builder;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
public class PostmanDto {
private String postmanId;
private TaskType taskType;
private PostmanActionType postmanActionType;
private PostmanMessageType postmanMessageType;
private String recipientHostId;
private String recipientDropBoxId;
private List<String> routingHostIdList;
public class PostmanActionType {
private ActionType actionType;
private String command;
private List<String> parameterKeyList = new ArrayList<>();
private String cron;
}
public class PostmanMessageType {
private MessageType messageType;
private String dataSourceId;
private String sqlId;
}
}
Loading…
Cancel
Save