From 55f4fb04894a3ca810dbe5759d2312d396dae676 Mon Sep 17 00:00:00 2001 From: seagull <24163551@qq.com> Date: Wed, 26 Feb 2020 16:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96netty=E9=80=9A=E4=BF=A1?= =?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 23 ++++-- .../luckyframe/LuckyFrameWebApplication.java | 25 +++---- .../common/netty/NettyChannelMap.java | 2 +- .../luckyframe/common/netty/NettyServer.java | 22 +++--- .../com/luckyframe/common/netty/Result.java | 7 +- .../common/netty/ServerHandler.java | 22 +++--- .../project/monitor/job/task/ClientHeart.java | 70 ++++++++++--------- .../client/controller/ClientController.java | 2 +- 8 files changed, 93 insertions(+), 80 deletions(-) diff --git a/pom.xml b/pom.xml index b066852..91fc88f 100644 --- a/pom.xml +++ b/pom.xml @@ -131,7 +131,7 @@ commons-fileupload ${commons.fileupload.version} - + cn.hutool @@ -281,14 +281,23 @@ org.flywaydb flyway-core - + io.netty netty-all - 5.0.0.Alpha2 - + + + + + + io.netty + netty-all + 5.0.0.Alpha2 + + + ${project.artifactId} @@ -302,9 +311,9 @@ - org.flywaydb - flyway-maven-plugin - + org.flywaydb + flyway-maven-plugin + diff --git a/src/main/java/com/luckyframe/LuckyFrameWebApplication.java b/src/main/java/com/luckyframe/LuckyFrameWebApplication.java index 6d7f6f9..1d9ac2e 100644 --- a/src/main/java/com/luckyframe/LuckyFrameWebApplication.java +++ b/src/main/java/com/luckyframe/LuckyFrameWebApplication.java @@ -1,9 +1,8 @@ package com.luckyframe; -import com.luckyframe.common.netty.NettyServer; +import java.net.InetSocketAddress; + import org.mybatis.spring.annotation.MapperScan; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; @@ -12,7 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import java.net.InetSocketAddress; +import com.luckyframe.common.netty.NettyServer; /** * 启动LuckyFrameWeb程序 @@ -37,8 +36,13 @@ public class LuckyFrameWebApplication implements CommandLineRunner @Autowired private NettyServer server; - private static final Logger log = LoggerFactory.getLogger(LuckyFrameWebApplication.class); - + @Override + public void run(String... args) throws Exception { + InetSocketAddress address = new InetSocketAddress(url,port); + System.out.println("服务端启动成功:"+url+":"+port); + server.start(address); + } + public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); @@ -46,13 +50,4 @@ public class LuckyFrameWebApplication implements CommandLineRunner System.out.println("LuckyFrameWeb启动成功......"); } - - @Override - public void run(String... args) throws Exception { - InetSocketAddress address = new InetSocketAddress(url,port); - System.out.println("服务端启动成功:"+url+":"+port); - server.start(address); - - - } } \ No newline at end of file diff --git a/src/main/java/com/luckyframe/common/netty/NettyChannelMap.java b/src/main/java/com/luckyframe/common/netty/NettyChannelMap.java index c3d5520..791c091 100644 --- a/src/main/java/com/luckyframe/common/netty/NettyChannelMap.java +++ b/src/main/java/com/luckyframe/common/netty/NettyChannelMap.java @@ -35,7 +35,7 @@ public class NettyChannelMap { } public void remove(SocketChannel socketChannel){ - for (Map.Entry entry:map.entrySet()){ + for (@SuppressWarnings("rawtypes") Map.Entry entry:map.entrySet()){ if (entry.getValue()==socketChannel){ log.info("#############客户端下线##############"); log.info("下线主机名为:"+entry.getKey()); diff --git a/src/main/java/com/luckyframe/common/netty/NettyServer.java b/src/main/java/com/luckyframe/common/netty/NettyServer.java index 56d5d19..308f1af 100644 --- a/src/main/java/com/luckyframe/common/netty/NettyServer.java +++ b/src/main/java/com/luckyframe/common/netty/NettyServer.java @@ -1,5 +1,16 @@ package com.luckyframe.common.netty; +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -7,17 +18,6 @@ import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.io.*; -import java.net.InetSocketAddress; -import java.util.HashMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; @Component public class NettyServer { diff --git a/src/main/java/com/luckyframe/common/netty/Result.java b/src/main/java/com/luckyframe/common/netty/Result.java index 73ebe4c..513aefa 100644 --- a/src/main/java/com/luckyframe/common/netty/Result.java +++ b/src/main/java/com/luckyframe/common/netty/Result.java @@ -4,7 +4,12 @@ import java.io.Serializable; public class Result implements Serializable { - private int code; + /** + * + */ + private static final long serialVersionUID = 1L; + + private int code; private Object message; private String uniId; diff --git a/src/main/java/com/luckyframe/common/netty/ServerHandler.java b/src/main/java/com/luckyframe/common/netty/ServerHandler.java index 5c31206..43eaa23 100644 --- a/src/main/java/com/luckyframe/common/netty/ServerHandler.java +++ b/src/main/java/com/luckyframe/common/netty/ServerHandler.java @@ -1,5 +1,16 @@ package com.luckyframe.common.netty; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.locks.ReentrantLock; + +import javax.annotation.Resource; + +import org.quartz.CronTrigger; +import org.quartz.Scheduler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.luckyframe.common.constant.JobConstants; @@ -7,26 +18,17 @@ import com.luckyframe.common.constant.ScheduleConstants; import com.luckyframe.framework.config.LuckyFrameConfig; import com.luckyframe.project.monitor.job.domain.Job; import com.luckyframe.project.monitor.job.mapper.JobMapper; -import com.luckyframe.project.monitor.job.service.IJobService; import com.luckyframe.project.monitor.job.util.ScheduleUtils; import com.luckyframe.project.system.client.domain.Client; import com.luckyframe.project.system.client.mapper.ClientMapper; import com.luckyframe.project.system.client.service.IClientService; + import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; -import org.quartz.CronTrigger; -import org.quartz.Scheduler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.locks.ReentrantLock; @Component("ServerHandler") @ChannelHandler.Sharable diff --git a/src/main/java/com/luckyframe/project/monitor/job/task/ClientHeart.java b/src/main/java/com/luckyframe/project/monitor/job/task/ClientHeart.java index 4174ebe..ae9634b 100644 --- a/src/main/java/com/luckyframe/project/monitor/job/task/ClientHeart.java +++ b/src/main/java/com/luckyframe/project/monitor/job/task/ClientHeart.java @@ -20,8 +20,7 @@ import com.luckyframe.project.system.client.domain.Client; import com.luckyframe.project.system.client.service.IClientService; /** - * 客户端心跳监听 - * ================================================================= + * 客户端心跳监听 ================================================================= * 这是一个受限制的自由软件!您不能在任何未经允许的前提下对程序代码进行修改和用于商业用途;也不允许对程序代码修改后以任何形式任何目的的再发布。 * 为了尊重作者的劳动成果,LuckyFrame关键版权信息严禁篡改 有任何疑问欢迎联系作者讨论。 QQ:1573584944 Seagull * ================================================================= @@ -33,9 +32,9 @@ import com.luckyframe.project.system.client.service.IClientService; public class ClientHeart { @Autowired private IClientService clientService; - - @Autowired - private LuckyFrameConfig lfConfig; + + @Autowired + private LuckyFrameConfig lfConfig; public static ClientHeart clientHeart; @@ -64,42 +63,45 @@ public class ClientHeart { } public void heartTask(String params) { - try { - String result = HttpRequest.httpClientGet( - "http://" + params + ":" + ClientConstants.CLIENT_MONITOR_PORT + "/getClientStatus", - new HashMap(0),3000); - JSONObject jsonObject = JSON.parseObject(result); - - if(null==ClientHeart.getClientStatus(params)){ - ClientHeart.setClientStatus(params, 1); - } - - if ("success".equals(jsonObject.get("status"))) { - if (ClientHeart.getClientStatus(params) != 0) { - Client client = new Client(); - if(lfConfig.getVersion().equals(jsonObject.get("version"))){ + try { + if (!params.contains("netty")) { + String result = HttpRequest.httpClientGet( + "http://" + params + ":" + ClientConstants.CLIENT_MONITOR_PORT + "/getClientStatus", + new HashMap(0), 3000); + JSONObject jsonObject = JSON.parseObject(result); + + if (null == ClientHeart.getClientStatus(params)) { + ClientHeart.setClientStatus(params, 1); + } + + if ("success".equals(jsonObject.get("status"))) { + if (ClientHeart.getClientStatus(params) != 0) { + Client client = new Client(); + if (lfConfig.getVersion().equals(jsonObject.get("version"))) { + client.setClientIp(params); + client.setRemark("检测客户端状态成功"); + client.setStatus(0); + clientService.updateClientStatusByIp(client); + } else { + client.setClientIp(params); + client.setRemark( + "客户端(" + jsonObject.get("version") + ")与服务器(" + lfConfig.getVersion() + ")版本不一致"); + client.setStatus(1); + clientService.updateClientStatusByIp(client); + } + } + } else { + if (ClientHeart.getClientStatus(params) != 1) { + Client client = new Client(); client.setClientIp(params); - client.setRemark("检测客户端状态成功"); - client.setStatus(0); - clientService.updateClientStatusByIp(client); - }else{ - client.setClientIp(params); - client.setRemark("客户端("+jsonObject.get("version")+")与服务器("+lfConfig.getVersion()+")版本不一致"); + client.setRemark("客户端返回状态异常"); client.setStatus(1); clientService.updateClientStatusByIp(client); } } - } else { - if (ClientHeart.getClientStatus(params) != 1) { - Client client = new Client(); - client.setClientIp(params); - client.setRemark("客户端返回状态异常"); - client.setStatus(1); - clientService.updateClientStatusByIp(client); - } } } catch (RuntimeException | KeyManagementException | NoSuchAlgorithmException | NoHttpResponseException e) { - if (null==ClientHeart.getClientStatus(params) || ClientHeart.getClientStatus(params) != 1) { + if (null == ClientHeart.getClientStatus(params) || ClientHeart.getClientStatus(params) != 1) { Client client = new Client(); client.setClientIp(params); client.setRemark("检测客户端远程异常"); diff --git a/src/main/java/com/luckyframe/project/system/client/controller/ClientController.java b/src/main/java/com/luckyframe/project/system/client/controller/ClientController.java index 5a7168a..fe0ed8b 100644 --- a/src/main/java/com/luckyframe/project/system/client/controller/ClientController.java +++ b/src/main/java/com/luckyframe/project/system/client/controller/ClientController.java @@ -191,7 +191,7 @@ public class ClientController extends BaseController if(oldClient!=null&&oldClient.getClientIp().contains("netty")) { if(!oldClient.getClientIp().equals(client.getClientIp())) - return error("修改使用Netty方式的客户端,请修改客户端配置!"); + return error("Netty通信的客户端,如需修改客户端IP,请在客户端配置!"); } for(Integer projectId:client.getProjectIds()){ if(!PermissionUtils.isProjectPermsPassByProjectId(projectId)){