心跳机制

Heart Beat

背景

经常会有这样的场景:

  1. 开发或者测试的时候,要测试一个定时任务job,刚好要测试的时候发现,不知道谁把job给执行了?
  2. 有些业务同一时间只能有一个进程在运行,但是结果并不是预期的,所以需要知道是否有多个进程同时在跑?
  3. 某些时候可能服务器停掉了,什么时候停的都不知道
  4. 想知道进程运行多久了,进行一些统计分析
  5. 等等其他

解决方案

以上问题有很多种解决方案,比如服务发现、心跳、轮询等等,这里选择的是心跳机制。因为心跳机制非常简单,而且也只需要依赖一个数据库表,非常的轻便,适合各个项目。

设计理念

在服务器启动的时候开启一个daemon线程,在daemon线程每个一段时间将关于进程的基本信息存储到数据库表中。

记录内容

heart-beat记录了如下内容:

    /**
     * 项目名字
     */
    private String projectPath;

    /**
     * 服务器ip
     */
    private String serverIp;

    /**
     * 进程号
     */
    private Integer processNo;

    /**
     * 进程开启时间
     */
    private Date processStartTime;

    /**
     * 心跳当前时间
     */
    private Date heartBeatTime;

代码

具体代码可以查看包:
smartadmin.common.heartbeat


作者简介:
卓大, 1024创新实验室主任,混迹于各个技术,熟悉点java,略懂点前端。