/// <summary> /// Adds a <see cref="DelegatingHandler"/> that performs round robin load balancing, optionally backed by an <see cref="IDistributedCache"/> /// </summary> /// <param name="httpClientBuilder">The <see cref="IHttpClientBuilder"/>.</param> /// <remarks> /// Requires an <see cref="IServiceInstanceProvider" /> or <see cref="IDiscoveryClient"/> in the DI container so the load balancer can sent traffic to more than one address<para /> /// Also requires an <see cref="IDistributedCache"/> in the DI Container for consistent round robin balancing across multiple client instances /// </remarks> /// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns> public static IHttpClientBuilder AddRoundRobinLoadBalancer(this IHttpClientBuilder httpClientBuilder) { if (httpClientBuilder == null) { throw new ArgumentNullException(nameof(httpClientBuilder)); } httpClientBuilder.Services.TryAddSingleton(typeof(RoundRobinLoadBalancer)); return(httpClientBuilder.AddLoadBalancer <RoundRobinLoadBalancer>()); }