如何为StandardResilienceHandler配置请求速率限制器?
问题描述
我正在开发对接外部HTTP服务的应用,需要对该服务的出站请求做速率限制。理想状态下,我想借助StandardResilienceHandler预设的最佳弹性实践配置来实现,当前的配置代码如下:
services.AddHttpClient<ExternalServiceGateway>() .AddStandardResilienceHandler();
但已知目标外部服务的速率限制是120请求/秒,我希望给出站请求应用符合该规则的速率限制策略。我已经能通过单独配置ResiliencePipeline实现类似逻辑,代码示例如下:
var pipeline = new ResiliencePipelineBuilder() .AddRetry(new RetryStrategyOptions { ShouldHandle = new PredicateBuilder().Handle<RateLimiterRejectedException>(), Delay = TimeSpan.FromSeconds(1), MaxRetryAttempts = 5, BackoffType = DelayBackoffType.Exponential, UseJitter = true }) .AddRateLimiter(new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions() { PermitLimit = 2, Window = TimeSpan.FromSeconds(1) })) .Build();
想请教是否有可行的方法,把这个自定义的速率限制(包含重试逻辑)策略和AddStandardResilienceHandler()的配置结合起来?
更新:问题/解决方案示例代码
我已经发布了用于测试该问题及对应解决方案的最小示例项目。
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

