java开发实现心跳机制,前端向后端发送心跳,服务端通过心跳判断状态是否正常,开发一个服务端的心跳超时定时器,写出详细代码
时间: 2024-04-29 12:22:00 浏览: 104
心跳检测 判系统是否还在正常运行
以下是一个简单的Java实现心跳机制的示例代码:
前端向后端发送心跳:
```java
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
// 每隔一定时间发送一次心跳
scheduledThreadPool.scheduleAtFixedRate(() -> {
try {
// 创建一个HTTP连接
HttpURLConnection connection = (HttpURLConnection) new URL("http://后端服务地址/heartbeat").openConnection();
// 设置请求方法为GET
connection.setRequestMethod("GET");
// 设置连接超时时间为5秒
connection.setConnectTimeout(5000);
// 发送心跳请求
connection.getResponseCode();
} catch (Exception e) {
// 发生异常说明连接失败,需要处理异常
e.printStackTrace();
}
}, 0, 30, TimeUnit.SECONDS);
```
后端处理心跳请求:
```java
@GetMapping("/heartbeat")
public String heartbeat() {
// 在这里可以更新服务状态或者记录最后心跳时间等操作
return "OK";
}
```
服务端心跳超时定时器:
```java
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
// 每隔一定时间检查一次心跳是否超时
scheduledThreadPool.scheduleAtFixedRate(() -> {
// 遍历所有客户端连接,检查心跳时间是否超时(例如5分钟没有收到心跳则认为超时)
for (Client client : clientList) {
if (System.currentTimeMillis() - client.getLastHeartbeatTime() > 5 * 60 * 1000) {
// 心跳超时,需要关闭客户端连接
client.close();
// 在这里可以记录日志或者发送告警等操作
}
}
}, 0, 1, TimeUnit.MINUTES);
```
阅读全文