Java—定时任务—ping网络连通性

简介

InetAddress是JDK提供用于网络编程的类,通过使用InetAddress类相关的方法实现测试网络连通性。

背景

因客户网络经常出现间歇中断,无法准确定位,为帮助其定位问题,使用定时任务去测试客户ip,并在无法连通时发送告警邮件,网络重新恢复后发送提醒邮件(邮件发送使用spring官方依赖)。

使用

1、方法解析

方法功能
InetAddress getByName(String host)获取给定主机名的的IP地址,host参数表示指定主机IP或域名
boolean isReachable(int timeout)判断在指定时间内指定的IP地址是否可以访问,可以访问返回true;否则返回false

2、代码示例

/**
 * 定时任务
 */
@Component
@Slf4j
public class ScheduledTask {
    // 默认ping失败次数为0,用作发送邮件
    private static Integer pingFailureCount = 0;

    // IP
    private static final String ip = "x.x.x.x";

    // ping超时时间 单位毫秒
    private static final Integer pingTimeOut = 5000;

    /**
     * 定时任务(每分钟执行一次):ping网络连通性
     */
    @Scheduled(cron = "0 * * * * ?")
    public void timingPing() {
        try {
            // ping指定公网ip
            boolean status = InetAddress.getByName(ip).isReachable(pingTimeOut);
            // ping失败
            if (!status) {
                // ping失败次数模50等于0,进行邮件告警
                if (pingFailureCount % 50 == 0) {
                    log.error("网络异常:IP:" + ip + " 网络异常。");
                }
                // ping失败次数加1
                pingFailureCount ++;
            } else {
                // ping失败次数大于0,进行邮件提醒
                if (pingFailureCount > 0) {
                    log.error("网络恢复:IP:" + ip + " 网络已恢复。");
                }
                // ping成功,ping失败次数置0
                pingFailureCount = 0;
            }
            log.info("定时任务--ping失败次数:{}", JSON.toJSONString(pingFailureCount));
            log.info("定时任务--ping网络连通性,IP:" + ip + " 结果:{}", JSON.toJSONString(status));
        } catch (Exception e) {
            log.error("定时任务--ping网络连通性,IP:" + ip + " 异常:{}\n{}", e.getMessage(), e);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值