Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确使用c#HttpClient和HttpClientFactory进行Dns循环负载平衡_C#_Load Balancing_Dotnet Httpclient_Consul - Fatal编程技术网

正确使用c#HttpClient和HttpClientFactory进行Dns循环负载平衡

正确使用c#HttpClient和HttpClientFactory进行Dns循环负载平衡,c#,load-balancing,dotnet-httpclient,consul,C#,Load Balancing,Dotnet Httpclient,Consul,我对在c#中使用HttpClient处理DNS循环平衡的正确方法有一个疑问 假设您有一个API(API 1),它在请求时可能调用另一个API(API 2)。因此,您可以多次调用API 2,向API 1发出多个并发请求。启用DNS循环的最佳方式是什么 在我们的例子中,我们在Kubernetes集群中有API,API 1和API 2都有多个副本。我们在服务地点使用领事车() 当我们使用HttpClientFactory像这样解析HttpClient时 private async Task<st

我对在c#中使用HttpClient处理DNS循环平衡的正确方法有一个疑问

假设您有一个API(API 1),它在请求时可能调用另一个API(API 2)。因此,您可以多次调用API 2,向API 1发出多个并发请求。启用DNS循环的最佳方式是什么

在我们的例子中,我们在Kubernetes集群中有API,API 1和API 2都有多个副本。我们在服务地点使用领事车()

当我们使用HttpClientFactory像这样解析HttpClient时

private async Task<string> MakeSomeRequest(string endpoint)
{
    // IHttpClientFactory _clientFactory is injected in the constructor
    var httpClient = _clientFactory.CreateClient();

    httpClient.BaseAddress = baseAddress;

    var result = await httpClient.GetAsync(endpoint);
    return await result.Content.ReadAsStringAsync();
}

我考虑过HttpClientFactory的多个命名注册,然后随机选择一个,但我很好奇是否有更好的方法?

您是否尝试过
httpClient.DefaultRequestHeaders.Add(“连接”,“关闭”)
?@JohnWu是否只是关闭了套接字?我没有试过。我更希望每个API 2实例都能保持一个套接字的打开状态。看到在你的问题发布前几分钟发布的问题了吗?这提供了你安装HttpClient所需的所有链接?特别是@AlexeiLevenkov,这个问题/awsner似乎没有涵盖我提出的概念。我觉得这本书很详细,读起来不错。我特别想知道人们是如何处理保持开放和选择一个套接字来实现循环dns负载平衡的。
using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = baseAddress;
    result = await httpClient.PostAsJsonAsync(endpoint, payload);
    return await result.Content.ReadAsStringAsync();
}