From 12442fde4adf4fbce799e3713a0c47cd3881a212 Mon Sep 17 00:00:00 2001 From: qiminbao Date: Fri, 12 Sep 2025 14:38:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E4=BB=A4=E4=B8=8B=E5=8F=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 9 ++ .../server/controller/TcpController.java | 16 +-- .../agent/server/controller/TcpService.java | 116 +++++++++--------- .../agent/server/core/enums/MsgEnum.java | 2 + .../server/netty/enpoint/AgentEndpoint.java | 4 +- .../netty/handler/AgentDecoderHandler.java | 2 +- src/main/resources/application-dev.yml | 10 +- src/main/resources/application.yml | 2 +- 8 files changed, 85 insertions(+), 76 deletions(-) diff --git a/pom.xml b/pom.xml index 46b1682..701f994 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,15 @@ org.springframework.boot spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + true + + diff --git a/src/main/java/com/tongran/agent/server/controller/TcpController.java b/src/main/java/com/tongran/agent/server/controller/TcpController.java index 26e7291..04233ec 100644 --- a/src/main/java/com/tongran/agent/server/controller/TcpController.java +++ b/src/main/java/com/tongran/agent/server/controller/TcpController.java @@ -1,6 +1,6 @@ package com.tongran.agent.server.controller; -import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.tongran.agent.server.netty.model.Message; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -15,17 +15,13 @@ public class TcpController { @Resource private TcpService tcpService; - @PostMapping("/create") - public void create(@Validated @RequestBody Message dto) { - tcpService.create(dto.getClientId()); - } - @PostMapping("/send") public void sendMessage(@Validated @RequestBody Message dto) { - String json = JSON.toJSONString(dto); -// ScriptPolicy policy = JSON.parseObject(dto.getData(), ScriptPolicy.class); -// System.out.println(policy.getFiles().get(0).getFileData()); - tcpService.sendMessage(json); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("clientId", dto.getClientId()); + jsonObject.put("dataType", dto.getDataType()); + jsonObject.put("data", dto.getData()); + tcpService.sendMessage(jsonObject.toString()); } diff --git a/src/main/java/com/tongran/agent/server/controller/TcpService.java b/src/main/java/com/tongran/agent/server/controller/TcpService.java index 4f442e6..be24582 100644 --- a/src/main/java/com/tongran/agent/server/controller/TcpService.java +++ b/src/main/java/com/tongran/agent/server/controller/TcpService.java @@ -10,6 +10,8 @@ import com.tongran.agent.server.netty.annotation.AgentDispatcher; import com.tongran.agent.server.netty.basics.AgentDispatcherManager; import com.tongran.agent.server.netty.basics.AgentHandler; import com.tongran.agent.server.netty.model.Message; +import com.tongran.agent.server.rockermq.AgentProducer; +import com.tongran.agent.server.rockermq.model.MqMsg; import com.tongran.agent.server.utils.AssertLog; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -29,6 +31,9 @@ public class TcpService { @Resource private MultiTargetNettyClient client; + @Resource + private AgentProducer agentProducer; + public TcpService() { this.sessionManager = SessionManager.getInstance(); } @@ -60,67 +65,58 @@ public class TcpService { AssertLog.info("consumer==> received down message: {}", message); try { Message dto = JSON.parseObject(message, Message.class); - if(Objects.nonNull(dto)){ - if(StringUtils.equals(dto.getDataType(), MsgEnum.注册.getValue())){ - JSONObject jsonObject = JSONObject.parseObject(dto.getData()); - String clientIp = ""; - int port = 0; - long timestamp = 0; - if(jsonObject.containsKey("clientIp")){ - clientIp = jsonObject.getString("clientIp"); + if(StringUtils.equals(dto.getDataType(), MsgEnum.注册.getValue())){ + JSONObject jsonObject = JSONObject.parseObject(dto.getData()); + String clientIp = ""; + int clientPort = 0; + String switchBoard = ""; + long timestamp = 0; + if(jsonObject.containsKey("clientIp")){ + clientIp = jsonObject.getString("clientIp"); + } + if(jsonObject.containsKey("clientPort")){ + clientPort = jsonObject.getInteger("clientPort"); + } + if(jsonObject.containsKey("switchBoard")){ + switchBoard = jsonObject.getString("switchBoard"); + } + if(jsonObject.containsKey("timestamp")){ + timestamp = jsonObject.getLongValue("timestamp"); + } + if(StringUtils.isBlank(clientIp) || clientPort == 0){ + //返回提醒ip 端口 空 + JSONObject json = new JSONObject(); + json.put("clientId",dto.getClientId()); + json.put("dataType",MsgEnum.注册应答.getValue()); + JSONObject dataJson = new JSONObject(); + dataJson.put("resCode",0); + dataJson.put("resMag","客户端IP、端口不能为空"); + dataJson.put("timestamp", System.currentTimeMillis()); + json.put("data",dataJson.toString()); + MqMsg mqMsg = MqMsg.builder().topic("tongran_agent_down").content(json.toString()).build(); + agentProducer.asyncSend(mqMsg); + return; + } + boolean success = client.createConnection(dto.getClientId(), clientIp, clientPort, 5); + if(success){ + //连接成功 + // 连接建立后可以发送登录认证消息 + JSONObject object = new JSONObject(); + object.put("timestamp", timestamp); + if(StringUtils.isNotBlank(switchBoard)){ + object.put("switchBoard",switchBoard); } - if(jsonObject.containsKey("port")){ - port = jsonObject.getInteger("port"); - } - if(jsonObject.containsKey("timestamp")){ - timestamp = jsonObject.getLongValue("timestamp"); - } - if(StringUtils.isBlank(clientIp) || port == 0){ - //返回提醒ip 端口 空 - return; - } - boolean success = client.createConnection(dto.getClientId(), clientIp, port, 5); - if(success){ - String community = ""; - String ip = ""; - int switchPort = 0; - String oids = ""; - String params = ""; - if(jsonObject.containsKey("switchBoard")){ - String switchBoard = jsonObject.getString("switchBoard"); - jsonObject = JSONObject.parseObject(switchBoard); - community = jsonObject.getString("community"); - ip = jsonObject.getString("ip"); - switchPort = jsonObject.getInteger("port"); - oids = jsonObject.getString("oids"); - params = jsonObject.getString("params"); - } - //连接成功 - // 连接建立后可以发送登录认证消息 - JSONObject object = new JSONObject(); - object.put("clientId",dto.getClientId()); - object.put("timestamp",timestamp); - JSONObject switchBoard = new JSONObject(); - switchBoard.put("community", community); - switchBoard.put("ip", ip); - switchBoard.put("port", switchPort); - switchBoard.put("oids", oids); - switchBoard.put("params", params); - object.put("switchBoard",switchBoard.toString()); - Message msg = Message.builder().clientId(dto.getClientId()).dataType(MsgEnum.注册.getValue()).data(object.toString()).build(); - // 将对象转为 JSON 字符串 - client.sendMessages(dto.getClientId(), msg); - }else{ - //连接失败 - } - } else { - AgentHandler msgHandler = agentDispatcherManager.getHandler(dto.getDataType() + "&" + AgentDispatcher.VersionEnum.V1.value); - if (ObjectUtil.isNotEmpty(msgHandler)) { - String msg = msgHandler.downHandle(dto.getData(), dto.getClientId()); - Message chargeMessage = Message.builder().clientId(dto.getClientId()).dataType(dto.getDataType()).data(msg).build(); - if (Objects.nonNull(sessionManager.getSessionById(dto.getClientId()))) { - sessionManager.writeAndFlush(sessionManager.getSessionById(dto.getClientId()).getChannel(), chargeMessage); - } + Message msg = Message.builder().clientId(dto.getClientId()).dataType(MsgEnum.注册.getValue()).data(object.toString()).build(); + // 将对象转为 JSON 字符串 + client.sendMessages(dto.getClientId(), msg); + } + } else { + AgentHandler msgHandler = agentDispatcherManager.getHandler(dto.getDataType() + "&" + AgentDispatcher.VersionEnum.V1.value); + if (ObjectUtil.isNotEmpty(msgHandler)) { + String msg = msgHandler.downHandle(dto.getData(), dto.getClientId()); + Message chargeMessage = Message.builder().clientId(dto.getClientId()).dataType(dto.getDataType()).data(msg).build(); + if (Objects.nonNull(sessionManager.getSessionById(dto.getClientId()))) { + sessionManager.writeAndFlush(sessionManager.getSessionById(dto.getClientId()).getChannel(), chargeMessage); } } } diff --git a/src/main/java/com/tongran/agent/server/core/enums/MsgEnum.java b/src/main/java/com/tongran/agent/server/core/enums/MsgEnum.java index ff63566..b35e04f 100644 --- a/src/main/java/com/tongran/agent/server/core/enums/MsgEnum.java +++ b/src/main/java/com/tongran/agent/server/core/enums/MsgEnum.java @@ -22,6 +22,8 @@ public enum MsgEnum { 心跳上报("HEARTBEAT"), + 心跳上报应答("HEARTBEAT_RSP"), + CPU上报("CPU"), 磁盘上报("DISK"), diff --git a/src/main/java/com/tongran/agent/server/netty/enpoint/AgentEndpoint.java b/src/main/java/com/tongran/agent/server/netty/enpoint/AgentEndpoint.java index ae086c6..2b2b854 100644 --- a/src/main/java/com/tongran/agent/server/netty/enpoint/AgentEndpoint.java +++ b/src/main/java/com/tongran/agent/server/netty/enpoint/AgentEndpoint.java @@ -81,7 +81,9 @@ public class AgentEndpoint { jsonObject.put("data", data); MqMsg mqMsg = MqMsg.builder().topic(agentMqConfig.getAgentTopic()).content(jsonObject.toString()).build(); agentProducer.asyncSend(mqMsg); - return null; + JSONObject json = new JSONObject(); + json.put("resCode",1); + return UpMsgResponse.builder().clientId(clientId).dataType(MsgEnum.心跳上报应答.getValue()).content(json.toString()).build(); } } diff --git a/src/main/java/com/tongran/agent/server/netty/handler/AgentDecoderHandler.java b/src/main/java/com/tongran/agent/server/netty/handler/AgentDecoderHandler.java index c0f76bc..46905ed 100644 --- a/src/main/java/com/tongran/agent/server/netty/handler/AgentDecoderHandler.java +++ b/src/main/java/com/tongran/agent/server/netty/handler/AgentDecoderHandler.java @@ -121,8 +121,8 @@ public class AgentDecoderHandler extends ChannelInboundHandlerAdapter { if(Objects.nonNull(agentDispatcherManager)){ AgentHandler msgHandler = agentDispatcherManager.getHandler(dataType + "&" + AgentDispatcher.VersionEnum.V1.value); if (ObjectUtil.isNotEmpty(msgHandler)) { - UpMsgResponse response = msgHandler.upHandle(data, clientId ); AssertLog.info("<<[up-after-handle]:clientId:{},type={},[handle-content]={}", clientId, dataType, data); + UpMsgResponse response = msgHandler.upHandle(data, clientId ); if(Objects.nonNull(response)){ Message agentMessage = Message.builder().build(); agentMessage.setClientId(clientId); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 143403c..3da7cc2 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,7 +1,7 @@ server: - port: 9018 + port: 7012 servlet: - context-path: /agent-server + context-path: /tr-agent-server # 接口文档配置 knife4j: @@ -12,9 +12,13 @@ knife4j: logging: file: # path: /usr/local/tongran/logs - path: /data/agent-server/logs + path: /data/tr-agent-server/logs # path: D:/job/agent-logs/logs +rocketmq: + name-server: 172.16.15.103:9876 + enabled: true + netty: server: # host: 172.16.15.103 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 166f7c3..3e7f3cb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: pathmatch: matching-strategy: ant_path_matcher application: - name: agent-server + name: tr-agent-server version: 1.0 web: resources: