阿里云服务器有时会出现由于dns解析问题造成的短暂不能访问数据库服务器(RDS)的问题
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
请问有什么开销最低的方式可以检查数据库连接是否正常?这样可以通过负载均衡的健康检查及时发现,不影响应用的正常运行。
connection.open();
这的确是开销最低的方式,采用这种方式的实现如下:
public static class HealthCheck
{
public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder app, string connectionString)
{
if (app == null)
throw new ArgumentNullException(nameof(app));
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
}
app.UseWhen(
context => context.Request.Path.Value == "/health",
builder => builder.Run(async context =>
{
using (var conn = new SqlConnection(connectionString))
{
await conn.OpenAsync();
}
await context.Response.WriteAsync("Ok");
}));
return app;
}
}
其实就是数据库连接池的 validate 机制。 这个可以参考 各种数据库连接池组件
或者建立一个连接, 定期执行一个语句,来检测连接是否被中断
– 风云力 6年前