YARP反向代理自定义健康检查策略ProbingCompleted未触发问题排查
问题分析与修复方案
核心问题
自定义IActiveHealthCheckPolicy的ProbingCompleted方法未触发,主要因配置与代码不匹配、健康检查服务未正确启用导致。
具体修复步骤
1. 修正配置文件的策略名称
appsettings.json中集群健康检查配置的Policy值必须与自定义策略类的Name属性完全一致:
{"Clusters": { "abc": { "HealthCheck": { "Active": { "Enabled": "true", "Interval": "00:00:10", "Timeout": "00:00:10", "Policy": "HealthResponsePolicy", // 改为自定义策略的名称 "Path": "/test" } }, "Destinations": { "abc": { "Address": "http://localhost:5500/abc", "Health": "http://localhost:5500/" } } }, "api": { "Destinations": { "api": { "Address": "http://localhost:5600/" } } } }}
2. 启用反向代理的健康检查服务
在Startup.cs的ConfigureServices中,添加反向代理时需明确启用主动健康检查:
public void ConfigureServices(IServiceCollection services) { // 先注册自定义健康检查策略 services.AddSingleton<IActiveHealthCheckPolicy, HealthResponsePolicy>(); // 添加反向代理并加载配置,同时启用主动健康检查 services.AddReverseProxy() .LoadFromConfig(Configuration.GetSection("ReverseProxy")) .AddActiveHealthChecks(); // 关键:启用健康检查核心服务 }
3. 验证目标端点的健康探测地址
确认Destinations中的Health地址正确,YARP会拼接配置的Path(即http://localhost:5500/test)发送探测请求,需确保该端点能正常响应并返回2xx状态码。
4. 检查服务注册顺序
确保自定义策略的注册代码在AddReverseProxy()之前执行,避免服务发现失败。
额外验证
- 查看应用日志,排查是否存在探测请求失败、策略加载错误等信息
- 手动访问
http://localhost:5500/test,确认端点可正常响应
内容的提问来源于stack exchange,提问作者azhar rahi
相关产品推荐
相关产品推荐

