# 背景
经常会有这样的场景:
- 开发或者测试的时候,要测试一个定时任务job,刚好要测试的时候发现,不知道谁把job给执行了?
- 有些业务同一时间只能有一个进程在运行,但是结果并不是预期的,所以需要知道是否有多个进程同时在跑?
- 某些时候可能服务器停掉了,什么时候停的都不知道
- 想知道进程运行多久了,进行一些统计分析
- 等等其他
# 解决方案
以上问题有很多种解决方案,比如服务发现、心跳、轮询等等,这里选择的是心跳机制。因为心跳机制非常简单,而且也只需要依赖一个数据库表,非常的轻便,适合各个项目。
# 设计理念
在服务器启动的时候开启一个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
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创新实验室 喝胡辣汤~ |