From 3d9252115b2ab68a06eb2193e94ffbb7d5e525e1 Mon Sep 17 00:00:00 2001 From: shanhy Date: Tue, 14 Jul 2020 20:51:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1=E5=99=A8IP?= =?UTF-8?q?=E5=9C=B0=E5=9D=80BUG=E4=BF=AE=E6=94=B9=EF=BC=88=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=AE=B9=E5=99=A8=E7=BD=91=E7=BB=9C=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E8=8E=B7=E5=8F=96IP=EF=BC=8C=E6=94=B9=E6=88=90HOST?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E6=A8=A1=E5=BC=8F=E8=8E=B7=E5=8F=96=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=EF=BC=89=20=E4=BF=AE=E6=94=B9=E4=BA=86=E8=BF=99?= =?UTF-8?q?=E4=B8=AABUG=EF=BC=8C=E7=8E=B0=E5=9C=A8=E9=83=BD=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E8=8E=B7=E5=8F=96=E5=88=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xxl/job/admin/core/id/HeartBeat.java | 29 ++++---- .../core/id/impl/MachineServiceImpl.java | 6 +- .../xxl/job/admin/core/util/MachineUtils.java | 67 +++++++++++++------ 3 files changed, 66 insertions(+), 36 deletions(-) diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java index 5c6d9741..3bc9f5bb 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/HeartBeat.java @@ -1,28 +1,29 @@ package com.xxl.job.admin.core.id; -import com.xxl.job.admin.core.id.service.MachineService; -import com.xxl.job.admin.core.model.XxlJobMachine; -import com.xxl.job.admin.core.util.MachineUtils; +import java.util.Date; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.util.Date; +import com.xxl.job.admin.core.id.service.MachineService; +import com.xxl.job.admin.core.model.XxlJobMachine; +import com.xxl.job.admin.core.util.MachineUtils; @Component @EnableScheduling public class HeartBeat { - @Autowired - private MachineService machineService; + @Autowired + private MachineService machineService; - @Scheduled(fixedDelay = 10000) - public void checkMachineSurvive(){ - String machineIp = MachineUtils.get(); - XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); - if(xxlJobMachine != null){ - machineService.update(machineIp,new Date()); - } - } + @Scheduled(fixedDelay = 10000) + public void checkMachineSurvive() { + String machineIp = MachineUtils.getIP(); + XxlJobMachine xxlJobMachine = machineService.selectByMachineIp(machineIp); + if (xxlJobMachine != null) { + machineService.update(machineIp, new Date()); + } + } } \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java index 2749932d..7488e274 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/id/impl/MachineServiceImpl.java @@ -43,15 +43,15 @@ public class MachineServiceImpl implements MachineService { @Override public Integer getInitMachineId() { - XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.get()); + XxlJobMachine xxlJobMachine = selectByMachineIp(MachineUtils.getIP()); Date nowDate = new Date(); int machineId = -1; if(xxlJobMachine != null){ - update(MachineUtils.get(),nowDate); + update(MachineUtils.getIP(),nowDate); machineId = xxlJobMachine.getMachineId(); }else{ xxlJobMachine = new XxlJobMachine(); - xxlJobMachine.setMachineIp(MachineUtils.get()); + xxlJobMachine.setMachineIp(MachineUtils.getIP()); xxlJobMachine.setAddTime(nowDate); xxlJobMachine.setHeartLastTime(nowDate); Random random = new Random(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java index 703443b2..98fdd731 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MachineUtils.java @@ -1,27 +1,56 @@ package com.xxl.job.admin.core.util; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Enumeration; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.InetAddress; -import java.net.UnknownHostException; - +/** + * 机器工具类 + * @author 单红宇 + * + */ public class MachineUtils { - private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); - - private static String machineIp = null; - - public static String get() { - if(machineIp == null){ - try { - //获取本机IP地址 - machineIp = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - logger.error("get host error:",e); - throw new RuntimeException("get host error"); - } - } - return machineIp; - } + private static final Logger logger = LoggerFactory.getLogger(MachineUtils.class); + + private static String machineIp = null; + + public static String getIP() { + if (machineIp == null) { + String ipv4 = getInet4Address(); + logger.info("ipv4={}", ipv4); + machineIp = ipv4; + } + return machineIp; + } + + /** + * 获取服务器Ipv4地址 + */ + public static String getInet4Address() { + Enumeration nis; + String ip = null; + try { + nis = NetworkInterface.getNetworkInterfaces(); + for (; nis.hasMoreElements();) { + NetworkInterface ni = nis.nextElement(); + Enumeration ias = ni.getInetAddresses(); + for (; ias.hasMoreElements();) { + InetAddress ia = ias.nextElement(); + // ia instanceof Inet6Address && !ia.equals("") + if (ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1")) { + ip = ia.getHostAddress(); + } + } + } + } catch (Exception e) { + logger.error("getServerIpAddress执行出错:" + e.getMessage() + "," + e.getCause()); + } + return ip; + } + }