From 69e875660dbf6ff7e71cddf0cf549883b7d4d9d7 Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Thu, 7 Aug 2025 10:22:31 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=8C=85=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=20-=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=A0=84=EB=8B=AC=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=20-=20=EC=BB=A4=EB=A7=A8=EB=93=9C=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=AF=B8=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../settings-examples/dfxagent-ami-dev.json | 90 +--------------- .../settings-examples/dfxagent-ami-oper.json | 90 +--------------- .../settings-examples/dfxagent-mkami-dev.json | 102 +----------------- .../dfxagent-mkami-oper.json | 102 +----------------- .../dfx/agent/config/AgentConfigDto.java | 2 +- .../agent/listener/ListenerController.java | 4 +- .../agent/listener/dto/ReceiveMessageDto.java | 10 +- .../listener/service/ListenerService.java | 26 ++++- .../dfx/agent/support/MessageUtils.java | 70 +++++++++++- .../task/postman/PostmanSchedulerService.java | 16 +++ 11 files changed, 132 insertions(+), 382 deletions(-) diff --git a/build.gradle b/build.gradle index dacf0bb..d13ddfd 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group = 'com.bsmlab.dfx' -version = '1.0.3' +version = '1.0.4' // git commit hash -> application.yml def gitCommitId = '' diff --git a/src/docs/settings-examples/dfxagent-ami-dev.json b/src/docs/settings-examples/dfxagent-ami-dev.json index 63ef10e..d52533f 100644 --- a/src/docs/settings-examples/dfxagent-ami-dev.json +++ b/src/docs/settings-examples/dfxagent-ami-dev.json @@ -37,6 +37,9 @@ "dropbox-fox-mkami-dev-oracle-receive-dlvg-modm-list", "dropbox-fox-mkami-dev-oracle-receive-dlvg-metr-list", "dropbox-fox-mkami-dev-oracle-receive-dlvg-lte-modm-list" + ], + "routingHostIdList": [ + "fox-mkami-dev-oracle" ] } ], @@ -339,9 +342,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-atch-file-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "공통 첨부파일 송신" }, { @@ -359,9 +359,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-atch-file-detail-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "공통 첨부파일상세 송신" }, { @@ -379,9 +376,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-work-act-dcu-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "유지관리 조치내용_DCU 송신" }, { @@ -399,9 +393,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-work-act-modem-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "유지관리 조치내용_모뎀 송신" }, { @@ -419,9 +410,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-etc-act-dcu-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "유지관리 기타 조치_DCU 송신" }, { @@ -439,9 +427,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-etc-act-modem-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "유지관리 기타 조치_모뎀계기 송신" }, { @@ -459,9 +444,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-work-act-svc-cd-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "유지관리 조치내용_노임품목 송신" }, { @@ -479,9 +461,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-sigong-act-dcu-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "AMI공사관리 시공조치내역_DCU 송신" }, { @@ -499,9 +478,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-sigong-act-modem-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "AMI공사관리 시공조치내역_모뎀 송신" }, { @@ -519,9 +495,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-sigong-unable-dcu-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "AMI공사관리 설치불가/철거내역_DCU 송신" }, { @@ -539,9 +512,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-sigong-unable-modem-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "AMI공사관리 설치불가/철거내역_모뎀 송신" }, { @@ -559,9 +529,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-meter-ndl-act-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "임시조치 당월검침정보(데이터) 송신" }, { @@ -579,9 +546,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-remo-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부설 작업 상세 정보 송신" }, { @@ -599,9 +563,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-ct-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 변류기 작업 정보 송신" }, { @@ -619,9 +580,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-ct-detail-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 변류기 상세 작업 정보 송신" }, { @@ -639,9 +597,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-ts-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 타임스위치 작업 정보 송신" }, { @@ -659,9 +614,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-ms-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 전자접촉기 작업 정보 송신" }, { @@ -679,9 +631,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-mb-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 계기함 작업 정보 송신" }, { @@ -699,9 +648,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-spd-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 부속 SPD 작업 정보 송신" }, { @@ -719,9 +665,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-gd-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 지침작업정보 송신" }, { @@ -739,9 +682,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-sl-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 봉인작업정보 송신" }, { @@ -759,9 +699,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-pt-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 변성기 작업 정보 송신" }, { @@ -779,9 +716,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-mtr-ttb-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "계기관리 시험용단자대 작업 정보 송신" }, { @@ -799,9 +733,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-equip-move-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재이력정보 송신" }, { @@ -819,9 +750,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-equip-base-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재기본정보 송신" }, { @@ -839,9 +767,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-dlvg-dcu-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재납품마스터_DCU 송신" }, { @@ -859,9 +784,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-dlvg-modm-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재납품마스터_모뎀 송신" }, { @@ -879,9 +801,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-dlvg-metr-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재납품마스터_계기 송신" }, { @@ -899,9 +818,6 @@ }, "recipientHostId": "fox-mkami-dev-oracle", "recipientDropBoxId": "dropbox-fox-mkami-dev-oracle-receive-dlvg-lte-modm-list", - "routingHostIdList": [ - "fox-mkami-dev-oracle" - ], "description": "자재관리 자재납품마스터_LTE모뎀 송신" } ] diff --git a/src/docs/settings-examples/dfxagent-ami-oper.json b/src/docs/settings-examples/dfxagent-ami-oper.json index a25f2ea..721ff94 100644 --- a/src/docs/settings-examples/dfxagent-ami-oper.json +++ b/src/docs/settings-examples/dfxagent-ami-oper.json @@ -37,6 +37,9 @@ "dropbox-mkami-oracle-receive-dlvg-modm-list", "dropbox-mkami-oracle-receive-dlvg-metr-list", "dropbox-mkami-oracle-receive-dlvg-lte-modm-list" + ], + "routingHostIdList": [ + "mkami-oracle" ] } ], @@ -339,9 +342,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-atch-file-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "공통 첨부파일 송신" }, { @@ -359,9 +359,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-atch-file-detail-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "공통 첨부파일상세 송신" }, { @@ -379,9 +376,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-work-act-dcu-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "유지관리 조치내용_DCU 송신" }, { @@ -399,9 +393,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-work-act-modem-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "유지관리 조치내용_모뎀 송신" }, { @@ -419,9 +410,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-etc-act-dcu-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "유지관리 기타 조치_DCU 송신" }, { @@ -439,9 +427,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-etc-act-modem-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "유지관리 기타 조치_모뎀계기 송신" }, { @@ -459,9 +444,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-work-act-svc-cd-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "유지관리 조치내용_노임품목 송신" }, { @@ -479,9 +461,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-sigong-act-dcu-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "AMI공사관리 시공조치내역_DCU 송신" }, { @@ -499,9 +478,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-sigong-act-modem-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "AMI공사관리 시공조치내역_모뎀 송신" }, { @@ -519,9 +495,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-sigong-unable-dcu-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "AMI공사관리 설치불가/철거내역_DCU 송신" }, { @@ -539,9 +512,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-sigong-unable-modem-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "AMI공사관리 설치불가/철거내역_모뎀 송신" }, { @@ -559,9 +529,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-meter-ndl-act-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "임시조치 당월검침정보(데이터) 송신" }, { @@ -579,9 +546,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-remo-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부설 작업 상세 정보 송신" }, { @@ -599,9 +563,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-ct-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 변류기 작업 정보 송신" }, { @@ -619,9 +580,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-ct-detail-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 변류기 상세 작업 정보 송신" }, { @@ -639,9 +597,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-ts-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 타임스위치 작업 정보 송신" }, { @@ -659,9 +614,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-ms-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 전자접촉기 작업 정보 송신" }, { @@ -679,9 +631,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-mb-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 계기함 작업 정보 송신" }, { @@ -699,9 +648,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-spd-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 부속 SPD 작업 정보 송신" }, { @@ -719,9 +665,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-gd-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 지침작업정보 송신" }, { @@ -739,9 +682,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-sl-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 봉인작업정보 송신" }, { @@ -759,9 +699,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-pt-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 변성기 작업 정보 송신" }, { @@ -779,9 +716,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-mtr-ttb-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "계기관리 시험용단자대 작업 정보 송신" }, { @@ -799,9 +733,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-equip-move-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재이력정보 송신" }, { @@ -819,9 +750,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-equip-base-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재기본정보 송신" }, { @@ -839,9 +767,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-dlvg-dcu-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재납품마스터_DCU 송신" }, { @@ -859,9 +784,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-dlvg-modm-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재납품마스터_모뎀 송신" }, { @@ -879,9 +801,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-dlvg-metr-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재납품마스터_계기 송신" }, { @@ -899,9 +818,6 @@ }, "recipientHostId": "mkami-oracle", "recipientDropBoxId": "dropbox-mkami-oracle-receive-dlvg-lte-modm-list", - "routingHostIdList": [ - "mkami-oracle" - ], "description": "자재관리 자재납품마스터_LTE모뎀 송신" } ] diff --git a/src/docs/settings-examples/dfxagent-mkami-dev.json b/src/docs/settings-examples/dfxagent-mkami-dev.json index 94e86f5..b2f7c3b 100644 --- a/src/docs/settings-examples/dfxagent-mkami-dev.json +++ b/src/docs/settings-examples/dfxagent-mkami-dev.json @@ -41,6 +41,9 @@ "dropbox-fox-ami-dev-cubrid-receive-amms-reg-co-to-inln-co-list", "dropbox-fox-ami-dev-cubrid-receive-mtr-expire-inst-list", "dropbox-fox-ami-dev-cubrid-receive-mtr-acpt-inst-list" + ], + "routingHostIdList": [ + "fox-ami-dev-cubrid" ] } ], @@ -315,9 +318,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-code-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_CODE 송신" }, { @@ -335,9 +335,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-comm-meth-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_COMM_METH 송신" }, { @@ -355,9 +352,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-dept-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_DEPT 송신" }, { @@ -375,9 +369,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-err-cause-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_ERR_CAUSE 송신" }, { @@ -395,9 +386,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-err-type-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_ERR_TYPE 송신" }, { @@ -415,9 +403,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-kdn-dept-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_KDN_DEPT 송신" }, { @@ -435,9 +420,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-order-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_ORDER 송신" }, { @@ -455,9 +437,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-work-group-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 T_WORK_GROUP 송신" }, { @@ -475,9 +454,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fac-err-cur-dcu-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 작업대상_DCU 송신" }, { @@ -495,9 +471,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fac-err-cur-modem-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 작업대상_모뎀 송신" }, { @@ -515,9 +488,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fcty-danger-info-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 위험불가개소 송신" }, { @@ -535,9 +505,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fac-err-clr-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 계기장애처리완료 송신" }, { @@ -555,9 +522,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fcty-cs-meter-info-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 설비계기정보 송신" }, { @@ -575,9 +539,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-fcty-dcu-info-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "유지관리 설비DCU정보 송신" }, { @@ -595,9 +556,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-sigong-master-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "AMI공사관리 공사기본정보 송신" }, { @@ -615,9 +573,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-sigong-sbcn-co-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "AMI공사관리 공사별 하도급업체 송신" }, { @@ -635,9 +590,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-sigong-order-new-modem-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "AMI공사관리 대상정보_모뎀_신규공사 송신" }, { @@ -655,9 +607,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-sigong-order-sig-modem-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "AMI공사관리 대상정보_모뎀_신호보강 송신" }, { @@ -675,9 +624,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-meter-ndl-lst-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "임시조치 전월검침정보(데이터) 송신" }, { @@ -695,9 +641,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtr-mst-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리 계기작업공사정보 송신" }, { @@ -715,9 +658,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtr-mst-detail-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리 계기작업공사현장정보 송신" }, { @@ -735,9 +675,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtr-inst-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리 작업 대상 정보 송신" }, { @@ -755,9 +692,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-ann-mtr-insp-expr-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리 연간대상실효계기목록 송신" }, { @@ -775,9 +709,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-inln-co-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 내선업체 송신" }, { @@ -795,9 +726,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-sbcn-co-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "공통 하도급사 송신" }, { @@ -815,9 +743,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-equip-mtrl-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 자재마스터 송신" }, { @@ -835,9 +760,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mng-plce-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 자재보관장소 송신" }, { @@ -855,9 +777,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-pckn-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 패킹 송신" }, { @@ -875,9 +794,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtrl-tp-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 자재유형 송신" }, { @@ -895,9 +811,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-amms-reg-co-to-sbcn-co-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 AMMS등록업체 - 하도급사 송신" }, { @@ -915,9 +828,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-amms-reg-co-to-inln-co-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "자재관리 AMMS등록업체 - 내선업체 송신" }, { @@ -935,9 +845,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtr-expire-inst-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리 실효계기 작업 대상리스트 송신" }, { @@ -955,9 +862,6 @@ }, "recipientHostId": "fox-ami-dev-cubrid", "recipientDropBoxId": "dropbox-fox-ami-dev-cubrid-receive-mtr-acpt-inst-list", - "routingHostIdList": [ - "fox-ami-dev-cubrid" - ], "description": "계기관리실효계기 외 작업 대상리스트 송신" } ] diff --git a/src/docs/settings-examples/dfxagent-mkami-oper.json b/src/docs/settings-examples/dfxagent-mkami-oper.json index 1ab31d1..adeded3 100644 --- a/src/docs/settings-examples/dfxagent-mkami-oper.json +++ b/src/docs/settings-examples/dfxagent-mkami-oper.json @@ -41,6 +41,9 @@ "dropbox-ami-cubrid-receive-amms-reg-co-to-inln-co-list", "dropbox-ami-cubrid-receive-mtr-expire-inst-list", "dropbox-ami-cubrid-receive-mtr-acpt-inst-list" + ], + "routingHostIdList": [ + "ami-cubrid" ] } ], @@ -315,9 +318,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-code-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_CODE 송신" }, { @@ -335,9 +335,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-comm-meth-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_COMM_METH 송신" }, { @@ -355,9 +352,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-dept-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_DEPT 송신" }, { @@ -375,9 +369,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-err-cause-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_ERR_CAUSE 송신" }, { @@ -395,9 +386,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-err-type-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_ERR_TYPE 송신" }, { @@ -415,9 +403,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-kdn-dept-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_KDN_DEPT 송신" }, { @@ -435,9 +420,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-order-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_ORDER 송신" }, { @@ -455,9 +437,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-work-group-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 T_WORK_GROUP 송신" }, { @@ -475,9 +454,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fac-err-cur-dcu-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 작업대상_DCU 송신" }, { @@ -495,9 +471,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fac-err-cur-modem-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 작업대상_모뎀 송신" }, { @@ -515,9 +488,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fcty-danger-info-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 위험불가개소 송신" }, { @@ -535,9 +505,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fac-err-clr-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 계기장애처리완료 송신" }, { @@ -555,9 +522,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fcty-cs-meter-info-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 설비계기정보 송신" }, { @@ -575,9 +539,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-fcty-dcu-info-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "유지관리 설비DCU정보 송신" }, { @@ -595,9 +556,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-sigong-master-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "AMI공사관리 공사기본정보 송신" }, { @@ -615,9 +573,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-sigong-sbcn-co-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "AMI공사관리 공사별 하도급업체 송신" }, { @@ -635,9 +590,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-sigong-order-new-modem-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "AMI공사관리 대상정보_모뎀_신규공사 송신" }, { @@ -655,9 +607,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-sigong-order-sig-modem-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "AMI공사관리 대상정보_모뎀_신호보강 송신" }, { @@ -675,9 +624,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-meter-ndl-lst-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "임시조치 전월검침정보(데이터) 송신" }, { @@ -695,9 +641,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtr-mst-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 계기작업공사정보 송신" }, { @@ -715,9 +658,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtr-mst-detail-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 계기작업공사현장정보 송신" }, { @@ -735,9 +675,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtr-inst-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 작업 대상 정보 송신" }, { @@ -755,9 +692,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-ann-mtr-insp-expr-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 연간대상실효계기목록 송신" }, { @@ -775,9 +709,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-inln-co-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 내선업체 송신" }, { @@ -795,9 +726,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-sbcn-co-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "공통 하도급사 송신" }, { @@ -815,9 +743,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-equip-mtrl-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 자재마스터 송신" }, { @@ -835,9 +760,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mng-plce-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 자재보관장소 송신" }, { @@ -855,9 +777,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-pckn-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 패킹 송신" }, { @@ -875,9 +794,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtrl-tp-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 자재유형 송신" }, { @@ -895,9 +811,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-amms-reg-co-to-sbcn-co-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 AMMS등록업체 - 하도급사 송신" }, { @@ -915,9 +828,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-amms-reg-co-to-inln-co-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "자재관리 AMMS등록업체 - 내선업체 송신" }, { @@ -935,9 +845,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtr-expire-inst-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 실효계기 작업 대상리스트 송신" }, { @@ -955,9 +862,6 @@ }, "recipientHostId": "ami-cubrid", "recipientDropBoxId": "dropbox-ami-cubrid-receive-mtr-acpt-inst-list", - "routingHostIdList": [ - "ami-cubrid" - ], "description": "계기관리 실효계기 외 작업 대상리스트 송신" } ] 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 b07b4d2..686e2f2 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java @@ -26,6 +26,7 @@ public class AgentConfigDto { private String hostName; private int listenPort; private List dropBoxIdList; + private List routingHostIdList; } @Data @@ -81,7 +82,6 @@ public class AgentConfigDto { private PostmanMessage message; private String recipientHostId; private String recipientDropBoxId; - private List routingHostIdList; private String description; } 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 8e6936c..e674c3f 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/ListenerController.java @@ -55,7 +55,7 @@ public class ListenerController { public AckDto telegram(HttpServletRequest request) { AckDto ackDto; try { - String bodyString= ServletUtils.getBodyString(request); + String bodyString = ServletUtils.getBodyString(request); ackDto = listenerService.receiveAck(bodyString); } catch (IOException e) { ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText(e.getLocalizedMessage()).messageUuid("").build(); @@ -70,7 +70,7 @@ public class ListenerController { public AckDto command(HttpServletRequest request) { AckDto ackDto; try { - String bodyString= ServletUtils.getBodyString(request); + String bodyString = ServletUtils.getBodyString(request); 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/listener/dto/ReceiveMessageDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java index 464b8ec..48551df 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java @@ -4,8 +4,8 @@ import com.bsmlab.dfx.agent.config.AgentConfigDto; import lombok.*; import java.io.Serializable; -import java.util.ArrayList; import java.util.List; +import java.util.Map; @ToString @Getter @@ -21,6 +21,7 @@ public class ReceiveMessageDto implements Serializable { private long receivedTimestamp; private String recipientHostId; private String recipientDropBoxId; + private List routingHostList; private String data; private List attachFileList;// = new ArrayList<>(); private ProcessStatus processStatus; @@ -31,4 +32,11 @@ public class ReceiveMessageDto implements Serializable { PROCESS_NOT_POSSIBLE, PROCESS_FAIL } + + @Data + @Builder + public static class RoutingHost implements Serializable { + private String hostId; + private long receivedTimestamp; + } } diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java index 4980a45..fbb2499 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java @@ -37,18 +37,36 @@ public class ListenerService { private final DropBoxService dropBoxService; private final AgentConfigReader agentConfigReader; + /** + * 메시지를 파싱한다. + * 메시지의 recipientHostId가 myHostId 이거나 메시지의 라우팅 중 마지막 hostId가 myHostId 이면 수신처리 한다. + * 그렇지 않은 경우 라우팅 다음 순번으로 메시지를 전송한다. (MessageUtils.transfer) + * @param messageJsonString + * @return + */ public AckDto receiveMessage(String messageJsonString) { AckDto ackDto = null; try { ReceiveMessageDto receiveMessageDto = MessageUtils.toReceiveMessageDto(messageJsonString); - if(dropBoxService.isExistToday(receiveMessageDto)) { - ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText("금일 전송한 메시지 중 중복된 UUID 가 존재합니다.").build(); + log.debug("[todayDebug] receiveMessageDto.getRecipientHostId(): {}", receiveMessageDto.getRecipientHostId()); + log.debug("[todayDebug] receiveMessageDto.getRoutingHostList(): {}", receiveMessageDto.getRoutingHostList()); + log.debug("[todayDebug] receiveMessageDto.getRoutingHostList().get(0).getClass().getName(): {}", receiveMessageDto.getRoutingHostList().get(0).getClass().getName()); + log.debug("[todayDebug] receiveMessageDto.getRoutingHostList().size() - 1: {}", receiveMessageDto.getRoutingHostList().size() - 1); + String lastRoutingHostId = receiveMessageDto.getRoutingHostList().get(receiveMessageDto.getRoutingHostList().size() - 1).getHostId(); + if(receiveMessageDto.getRecipientHostId().equals(this.agentConfigReader.getAgentConfigDto().getMyHostId()) || lastRoutingHostId.equals(this.agentConfigReader.getAgentConfigDto().getMyHostId())) { + if(dropBoxService.isExistToday(receiveMessageDto)) { + ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText("금일 전송한 메시지 중 중복된 UUID 가 존재합니다.").build(); + } + else { + dropBoxService.add(receiveMessageDto); + ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build(); + } } else { - dropBoxService.add(receiveMessageDto); + MessageUtils.transfer(this.agentConfigReader, receiveMessageDto); ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build(); } - } catch (IllegalMessageException | NullMessageException | InCompleteMessageException e) { + } catch (IllegalMessageException | NullMessageException | InCompleteMessageException | JsonProcessingException e) { log.error("{}", e, e); ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_FAIL).resultText(e.getLocalizedMessage()).build(); } diff --git a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java index ac42748..27b5c8f 100644 --- a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java +++ b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java @@ -1,6 +1,7 @@ package com.bsmlab.dfx.agent.support; import com.bsmlab.dfx.agent.config.AgentConfigDto; +import com.bsmlab.dfx.agent.config.AgentConfigReader; import com.bsmlab.dfx.agent.listener.dto.AckDto; import com.bsmlab.dfx.agent.listener.dto.CommandDto; import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto; @@ -13,7 +14,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.StringUtils; -import org.h2.command.Command; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.web.client.RestTemplate; import java.util.*; @@ -121,6 +125,20 @@ public class MessageUtils { else { recipientDropBoxId = String.valueOf(map.get("recipientDropBoxId")); } + List routingHostList = null; + if(map.get("routingHostList") == null) { + throw new InCompleteMessageException("routingHostList 엘리먼트를 찾을 수 없습니다."); + } + else { + log.debug("[todayDebug] map.get(\"routingHostList\").getClass().getName(): {}", map.get("routingHostList").getClass().getName()); + log.debug("[todayDebug] ((List) map.get(\"routingHostList\")).get(0).getClass().getName(): {}", ((List) map.get("routingHostList")).get(0).getClass().getName()); + List> mapList = (List>) map.get("routingHostList"); + routingHostList = new ArrayList<>(); + for(Map map1 : mapList) { + ReceiveMessageDto.RoutingHost routingHost = ReceiveMessageDto.RoutingHost.builder().hostId(String.valueOf(map1.get("hostId"))).receivedTimestamp(Long.parseLong(String.valueOf(map1.get("receivedTimestamp")))).build(); + routingHostList.add(routingHost); + } + } String dataString; if(map.get("data") == null) { throw new InCompleteMessageException("data 엘리먼트를 찾을 수 없습니다."); @@ -135,6 +153,7 @@ public class MessageUtils { .senderHostId(senderHostId).senderTimestamp(senderTimestamp) .messageUuid(messageUuid).messageType(messageType).receivedTimestamp(receivedTimestamp) .recipientHostId(recipientHostId).recipientDropBoxId(recipientDropBoxId) + .routingHostList(routingHostList) .data(dataString).attachFileList(new ArrayList<>()).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED) .build(); } @@ -185,4 +204,53 @@ public class MessageUtils { } return commandDto; } + + public static AckDto send(AgentConfigReader agentConfigReader, String postmanId, ReceiveMessageDto receiveMessageDto) throws JsonProcessingException { + AgentConfigDto.KnownAgent recipientAgent = agentConfigReader.getKnownAgent(receiveMessageDto.getRecipientHostId()); + String targetHostId = recipientAgent.getRoutingHostIdList().get(0); + AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId); + ObjectMapper objectMapper = new ObjectMapper(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")" + + ", host ID: " + agentConfigReader.getAgentConfigDto().getMyHostId() + + ", action: postman(postman-id: " + postmanId + ")" + ); + HttpEntity bodyEntity = new HttpEntity<>(receiveMessageDto, httpHeaders); + RestTemplate restTemplate = new RestTemplate(); + String url = "http://" + knownAgent.getHostName() + ":" + knownAgent.getListenPort() + "/listen"; + String response = restTemplate.postForObject(url, bodyEntity, String.class); + AckDto ackDto = objectMapper.readValue(response, new TypeReference() {}); + return ackDto; + } + + public static AckDto transfer(AgentConfigReader agentConfigReader, ReceiveMessageDto receiveMessageDto) throws JsonProcessingException { + String targetHostId = ""; + List routingHostList = receiveMessageDto.getRoutingHostList(); + Iterator iterator = routingHostList.iterator(); + while(iterator.hasNext()) { + ReceiveMessageDto.RoutingHost routingHost = iterator.next(); + if(agentConfigReader.getAgentConfigDto().getMyHostId().equals(routingHost.getHostId())) { + ReceiveMessageDto.RoutingHost nextRoutingHost = iterator.next(); + targetHostId = nextRoutingHost.getHostId(); + routingHost.setReceivedTimestamp(System.currentTimeMillis()); + break; + } + } + AgentConfigDto.KnownAgent knownAgent = agentConfigReader.getKnownAgent(targetHostId); + ObjectMapper objectMapper = new ObjectMapper(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")" + + ", host ID: " + agentConfigReader.getAgentConfigDto().getMyHostId() + + ", action: transfer(next-host-id: " + targetHostId + ")" + ); + HttpEntity bodyEntity = new HttpEntity<>(receiveMessageDto, httpHeaders); + RestTemplate restTemplate = new RestTemplate(); + String url = "http://" + knownAgent.getHostName() + ":" + knownAgent.getListenPort() + "/listen"; + String response = restTemplate.postForObject(url, bodyEntity, String.class); + AckDto ackDto = objectMapper.readValue(response, new TypeReference() {}); + return ackDto; + } + } diff --git a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java index d0589aa..cf0af03 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java @@ -5,6 +5,7 @@ import com.bsmlab.dfx.agent.config.AgentConfigReader; import com.bsmlab.dfx.agent.config.datasource.SqlExecuteService; import com.bsmlab.dfx.agent.listener.dto.AckDto; import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto; +import com.bsmlab.dfx.agent.support.MessageUtils; import com.bsmlab.dfx.agent.support.exception.DfxException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -85,10 +86,17 @@ public class PostmanSchedulerService { List> dataMapList = sqlExecuteService.select(dataSourceId, sqlId, null); if(dataMapList != null && !dataMapList.isEmpty()) { String dataString = objectMapper.writeValueAsString(dataMapList); + List routingHostList = new ArrayList<>(); + for(String routingHostId : knownAgent.getRoutingHostIdList()) { + ReceiveMessageDto.RoutingHost routingHost = ReceiveMessageDto.RoutingHost.builder().hostId(routingHostId).receivedTimestamp(0).build(); + routingHostList.add(routingHost); + } ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().senderHostId(senderHostId).senderTimestamp(senderTimestamp) .messageUuid(messageUuid).messageType(AgentConfigDto.MessageType.TRANSFER_DB_TO_DB) .recipientHostId(postman.getRecipientHostId()).recipientDropBoxId(postman.getRecipientDropBoxId()) + .routingHostList(routingHostList) .data(dataString).build(); + /* HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.set("User-Agent", agentConfigReader.getApplicationName() + ", version: " + agentConfigReader.getApplicationVersion() + "(" + agentConfigReader.getApplicationCommitId() + ")" @@ -101,6 +109,9 @@ public class PostmanSchedulerService { log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size()); response = restTemplate.postForObject(url, bodyEntity, String.class); AckDto ackDto = objectMapper.readValue(response, new TypeReference() {}); + */ + log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size()); + AckDto ackDto = MessageUtils.send(this.agentConfigReader, postman.getPostmanId(), receiveMessageDto); log.debug("postman received ack from {} ack: {}", receiveMessageDto.getRecipientHostId(), ackDto); if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) { log.warn("대상 agent {}[{}]에게 전송하였으나 상대방이 수신하지 못하였습니다. 응답: {} 응답메시지: {}" @@ -217,4 +228,9 @@ public class PostmanSchedulerService { log.warn("대상 agent {}[{}] 실행 상태가 정상(ALIVE)이 아니므로 전송을 중지합니다. postman ID: {}", knownAgent.getHostId(), knownAgent.getHostName(), postman.getPostmanId()); } } + + public void transferReceiveMessageDto(ReceiveMessageDto receiveMessageDto) { + //List> routingHostList = receiveMessageDto.getRoutingHostList(); + + } }