# 心跳功能

本文介绍如何在开发中使用Sermant提供的心跳功能。

# 功能介绍

心跳功能在微服务治理领域起着关键的作用,可以通过心跳机制来监控各个服务实例的状态,通过周期性上报心跳可以告知其他服务自己的存活状态,避免实例宕机导致异常。

Sermant中通过心跳向Sermant Backend上报服务实例的元数据,同时还会上报已经被加载的服务治理插件的信息,来告知当前Sermant Agent携带了哪些服务治理插件,通过周期性上报心跳,Sermant Backend监控面板可以看到当前已经携带Sermant Agent的服务实例。

注意: 心跳功能需要和Backend监控面板同时使用,参考Sermant Backend使用手册

# 开发示例

基于心跳能力的开发,主要用来让插件开发者可以将插件少量十分重要信息通过心跳进行上报,并且在监控面板可观测。本开发示例基于创建首个插件文档中创建的工程。

在工程template\template-plugin模块下com.huaweicloud.sermant.template.TemplateDeclarer类中增加变量heartbeatService获取框架心跳服务,用于设置心跳额外信息:

HeartbeatService heartbeatService = ServiceManager.getService(HeartbeatService.class);

在针对main方法的拦截器before方法中通过setExtInfo接口设置心跳额外信息:

@Override
public ExecuteContext before(ExecuteContext context) throws Exception {
  heartbeatService.setExtInfo(() -> Collections.singletonMap("status", "started"));
  System.out.println("Good morning!");
  return context;
}
  1. 开发完成后,可参照创建首个插件时的打包构建 流程,在工程根目录下执行 mvn package
  2. 参考backend使用手册 启动backend。
  3. 将文件agent/config/config.properties中的心跳开关agent.service.heartbeat.enable设置为true:
# 心跳服务开关
agent.service.heartbeat.enable=true
  1. 最后访问http://localhost:8900查看backend界面

pic

从图中可以看到,当前携带Sermant Agent的实例有一个,并且处于正常运行状态,并且携带1.2.0版本的template插件。

Sermant Agent会定期向Sermant Backend发送心跳,Sermant Backend在收到来自各个Sermant Agent的心跳时,会为其续约,如果超过有效时间(可通过Sermant Backend配置修改),还未收到某一节点上报的心跳,则就将该节点置为失联状态。

# API&配置

# API

获取心跳服务

获取心跳服务对象,用于在插件心跳数据中增加额外信息,该服务由框架进行初始化,插件可直接获取使用。

HeartbeatService heartbeatService = ServiceManager.getService(HeartbeatService.class);

增加心跳附加信息

开发者可通过如下方式在插件中增加心跳附加信息。

heartbeatService.setExtInfo(() -> Collections.singletonMap("key", "value"));

# 配置

基于创建首个插件中的工程结构,心跳功能配置通过修改config/config.properties文件来设置。

配置项 描述 配置示例
heartbeat.interval 心跳发送间隔时间,单位ms heartbeat.interval=30000
上次更新: 2024/5/16 02:26:27