Akka服务健康检查配置:Kafka集群或数据库断开时如何标记为不健康?
Akka服务健康检查配置调整方案
要让Akka服务在Kafka集群或数据库连接断开时,通过/ready和/alive端点上报不健康状态,可通过以下配置及自定义实现完成:
1. 启用Akka Management健康检查基础配置
先开启Akka Management健康检查模块,并绑定到指定端点:
akka.management { enabled = true health-checks { enabled = true readiness-endpoint = "/ready" liveness-endpoint = "/alive" } }
2. 添加Kafka连接健康检查
若使用Akka Kafka客户端,可直接启用其内置健康检查,自动检测Kafka集群连接状态:
akka.kafka.consumer { health-check { enabled = true readiness-check { enabled = true # 检查是否成功连接到Kafka集群 connected = true # 可选:检查消费者是否已分配到分区(按需启用) partitions-assigned = true } # 如需将Kafka检查纳入存活检查,添加以下配置 liveness-check { enabled = true connected = true } } }
当Kafka连接断开时,该检查会失败,触发健康端点返回不健康状态。
3. 添加数据库连接健康检查
针对数据库连接,需自定义健康检查实现,并配置到Akka健康检查列表中:
3.1 配置自定义检查类
akka.management.health-checks.checks { database-connection = "com.yourproject.health.DbConnectionHealthCheck" }
3.2 实现健康检查类
创建DbConnectionHealthCheck类,实现Akka的HealthCheck接口,通过简单查询验证数据库连接可用性:
import akka.management.healthchecks.HealthCheck; import scala.concurrent.Future; import scala.concurrent.Promise; import javax.sql.DataSource; import java.sql.Connection; import java.sql.Statement; public class DbConnectionHealthCheck implements HealthCheck { private final DataSource dataSource; public DbConnectionHealthCheck(DataSource dataSource) { this.dataSource = dataSource; } @Override public Future<Boolean> check() { Promise<Boolean> promise = Promise.apply(); try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement()) { stmt.executeQuery("SELECT 1"); promise.success(true); } catch (Exception e) { promise.success(false); } return promise.future(); } }
当数据库连接失败时,该类返回false,触发健康端点上报不健康。
4. 验证效果
配置完成后,若Kafka集群断开或数据库连接失败,/ready和/alive端点会返回503 Service Unavailable;连接恢复后自动回到200 OK。
内容的提问来源于stack exchange,提问作者Akshay Jain
相关产品推荐
相关产品推荐

