Asp.net Rest Api более высокие запросы

Я хотел бы создать сервис API отдыха Asp.net (с net5), и я хотел бы знать, на правильном ли я пути. Эта служба будет кэшировать значения из другой службы Y в течение X минут, если клиент будет запрашивать данные, и эти данные истекли в этой службе, он запросит у службы Y (с запросом GET) и обновит кеш.

Моя цель — создать сервис, который может обрабатывать также 100 запросов в секунду (я знаю, что на эти данные влияет то, сколько времени требуется для обработки client.GetAsync (), но я бы хотел избежать проблемы с cancelled_request или другой проблемы, когда вы управляли множеством подключений , я не совсем уверен, правильно ли я реализовал материал httpClient)

Через некоторое время, когда происходит много запросов, у меня появляется эта ошибка HTTPERR для этого вызова

[…] — 1 Request_Cancelled DefaultAppPool

потом через некоторое время начнут возвращаться на все звонки и услуга будет заморожена
[…] — 503 1 Н / Д DefaultAppPool

Я реализовал класс Startup с

services.AddHttpClient<DataController>(x => x.Timeout = TimeSpan.FromSeconds(5))

DataController

private readonly IHttpClientFactory _clientFactory;
private static readonly SemaphoreSlim SemaphoreSlim = new SemaphoreSlim(1, 100);

public DataController (ILogger<PriceController> logger, IHttpClientFactory clientFactory)
{
  _clientFactory = clientFactory;
}

[HttpGet("testRaw/{KeyId}")]
public async Task<IActionResult> GetTestRaw(uint KeyId)
{
    //if data are update return data [...]
    //if data expired
    await SemaphoreSlim.WaitAsync();
    try
    {
        return await UpdateService(KeyId);
    }
    finally
    {
        SemaphoreSlim.Release();
    }
}

private async Task<string> UpdateService(uint keyId)
{
     var client = _clientFactory.CreateClient();
     using var response = await client.GetAsync("myserviceURL/"+ keyId);
     if (!response.IsSuccessStatusCode)
         return null;
     
     string data = await response.Content.ReadAsStringAsync();
     //update data to local cache [...]
     return data 
}

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *