心跳机制

9/7/2021

# 背景

经常会有这样的场景:

  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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 代码

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


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

加“卓大”微信,入群 关注 1024创新实验室! 我要请 1024创新实验室 喝胡辣汤~
告白气球 (钢琴版)
JESSE T