You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ocelot网关负载均衡问题:NET6中首节点不可用时未自动尝试次节点

Ocelot .NET6 故障转移不生效问题解决

你的配置已经启用了RoundRobin负载均衡和QoS熔断,但默认情况下Ocelot不会在单次请求失败时自动切换到下一个节点,只会在节点被熔断后(达到失败次数阈值),后续请求才会路由到可用节点。要实现即时故障转移,需要调整配置并添加重试策略:

1. 调整QoS熔断阈值

将ExceptionsAllowedBeforeBreaking设为1,这样单个节点失败1次就会被立即熔断,后续请求直接跳过该节点:

"QoSOptions": {
  "ExceptionsAllowedBeforeBreaking": 1,
  "DurationOfBreak": 5000,
  "TimeoutValue": 2000
}

2. 添加Polly重试策略

在路由配置中新增RetryPolicyOptions,指定重试次数和触发重试的异常类型,让Ocelot在遇到连接失败时自动重试其他节点:

"Routes": [
{
  "UpstreamPathTemplate": "/api/abc",
  "UpstreamHttpMethod": [ "POST" ],
  "QoSOptions": {
    "ExceptionsAllowedBeforeBreaking": 1,
    "DurationOfBreak": 5000,
    "TimeoutValue": 2000
  },
  "RetryPolicyOptions": {
    "NumberOfRetries": 1,
    "RetryOnExceptionTypes": [ "System.Net.Http.HttpRequestException" ]
  },
  "DownstreamPathTemplate": "/api/qwe",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "serverA",
      "Port": 2019
    },
    {
      "Host": "serverB",
      "Port": 2019
    }
  ],
  "LoadBalancerOptions": {
    "Type": "RoundRobin"
  }
}
]

关键说明

  • QoS熔断负责将故障节点从可用列表中临时移除(DurationOfBreak指定熔断时长)
  • 重试策略负责在单次请求遇到故障时,自动尝试其他可用节点
  • 确保你的Ocelot版本支持RetryPolicyOptions(Ocelot 16.0+版本已集成该配置)

内容的提问来源于stack exchange,提问作者Tiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:50:35