Правильное использование c # HttpClient и HttpClientFactory для Dns Round Robin Balancing - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть вопрос о том, как правильно обрабатывать циклическую балансировку DNS в c # с помощью HttpClient.

Допустим, у вас есть API (API 1), который по запросу потенциально вызывает другой API (API 2). Таким образом, вы можете иметь несколько одновременных запросов в API 1, вызывая API 2 несколько раз. Каков наилучший способ включения циклического перебора DNS?

В нашем случае у нас есть API в кластерах Kubernetes с несколькими репликами для API 1 и 2. Мы используем Consul Side Car Inject для определения местоположения службы (https://www.consul.io/docs/platform/k8s/connect.html)

Когда мы используем 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();
}

Мы сталкиваемся с проблемой, что циклическое распределение нагрузки DNS не используется, поскольку сокет остается открытым, а соединение HttpClientявляется общим для всех запросов. Таким образом, API 1 получает первое соединение с первым экземпляром API 2 и продолжает использовать одно и то же для всех потоков API 1.

В настоящее время мы отказались от использования httpClientFactory. в пользу ол верных. Что работает, потому что не сохраняет сокет открытым.

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = baseAddress;
    result = await httpClient.PostAsJsonAsync(endpoint, payload);
    return await result.Content.ReadAsStringAsync();
}

Я рассмотрел несколько именованных регистраций HttpClientFactory, а затем случайно выбрал одну, но мне любопытно узнать, есть лилучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...