YARP Docsv2.3
文档/流量与可靠性/请求超时

请求超时

.NET 8 引入了请求超时中间件,可用于配置请求超时

简介

.NET 8 引入了请求超时中间件,用于全局以及按终结点配置请求超时。在 .NET 8 或更高版本上运行时,YARP 2.1 中同样提供此功能。

默认设置

默认情况下,请求不设置任何超时,用于清理空闲请求的活动超时(Activity Timeout)除外。在 RequestTimeoutOptions 中指定的默认策略同样会应用于被代理的请求。

配置

可以通过 RouteConfig 为每个路由指定超时和超时策略,这些设置也可以从配置文件的 Routes 部分绑定。与其他路由属性一样,此设置可以在不重启代理的情况下进行修改并重新加载。策略名称不区分大小写。

超时以 TimeSpan 格式(HH:MM:SS)指定。在同一个路由上同时指定 Timeout 和 TimeoutPolicy 是无效的,会导致该配置被拒绝。

说明

当调试器附加到进程时,请求超时不会生效。

示例:

JSON{
   "ReverseProxy": {
      "Routes": {
         "route1" : {
             "ClusterId": "cluster1",
             "TimeoutPolicy": "customPolicy",
             "Match": {
                "Hosts": [ "localhost" ]
             }
         }
         "route2" : {
             "ClusterId": "cluster1",
             "Timeout": "00:01:00",
             "Match": {
                         "Hosts": [ "localhost2" ]
                      }
                   }
      },
      "Clusters": {
                   "cluster1": {
                      "Destinations": {
                         "cluster1/destination1": {
                            "Address": "https://localhost:10001/"
                         }
                      }
                   }
      }
   }
}
Timeout policies and the default policy can be configured in the service collection and the
middleware can be added as follows:
C#   var builder = WebApplication.CreateBuilder(args);
   builder.Services.AddReverseProxy()
          .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
   builder.Services.AddRequestTimeouts(options =>
   {
          options.AddPolicy("customPolicy", TimeSpan.FromSeconds(20));
   });
   var app = builder.Build();
   app.UseRequestTimeouts();
   app.MapReverseProxy();
   app.Run();

禁用超时

在路由的 TimeoutPolicy 参数中指定值 disable,表示请求超时中间件不会对该路由应用超时。

WebSockets

WebSocket 握手完成后,请求超时将被禁用。

说明

本文由作者在 AI 协助下创作完成。了解详细信息

改编自 Microsoft Learn ,遵循 CC BY 4.0 许可协议。