Проблема с тайм-аутом веб-сайта при запуске двух одинаковых фоновых служб .NET CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с тайм-аутом веб-сайта при запуске двух одинаковых фоновых служб .NET Core

Сообщение Anonymous »

Я использую две идентичные фоновые службы, их единственная задача — извлекать данные из подсистемы Azure и отправлять их в API. Я вставляю один ниже для другого, меняется только имя и значения для apiUrl, _topicName и _subscriptionName.

Код: Выделить всё

Startup.cs

Код: Выделить всё

services.AddHostedService();
services.AddHostedService(); // As soon as added the site starts
throwing timeout even though nothing is on azure sub.
Класс обслуживания:

Код: Выделить всё

public class WhatsAppService : BackgroundService
{
private string _apiUrl = "";
private readonly AzureServiceBusConnection _azureServiceBusConnection;
private readonly WhatsAppSettings _whatsappsettings;
private ServiceBusClient _client;
private string _topicName = "";
private string _subscriptionName = "";
private readonly SemaphoreSlim _throttle;

public WhatsAppService(IOptions azureServiceBusConnection, IOptions whatsappsettings)
{
_throttle = new SemaphoreSlim(10);  // Allows up to 10 concurrent requests

_azureServiceBusConnection = azureServiceBusConnection.Value;
_whatsappsettings = whatsappsettings.Value;

_apiUrl = _whatsappsettings.ApiUrl;
_topicName = _whatsappsettings.TopicName;
_subscriptionName = _whatsappsettings.SubscriptionName;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_client = new ServiceBusClient(_azureServiceBusConnection.ConnectionString);
var sessionTasks = new List(); // List to track session processing tasks

while (!stoppingToken.IsCancellationRequested)
{
try
{
ServiceBusSessionReceiver sessionReceiver = null;

try
{
sessionReceiver = await _client.AcceptNextSessionAsync(_topicName, _subscriptionName);
}
catch (Exception ex)
{
Console.WriteLine($"Error accepting session: {ex.Message}");
await Task.Delay(5000, stoppingToken); // Wait before retrying
continue; // Retry accepting the next session
}

if (sessionReceiver != null)
{
// Start processing messages for this session in a new task
var task = Task.Run(async () =>
{
Console.WriteLine($"Processing messages for session: {sessionReceiver.SessionId}");

while (true)
{
ServiceBusReceivedMessage message = await sessionReceiver.ReceiveMessageAsync(TimeSpan.FromSeconds(10));

if (message == null)
{
Console.WriteLine("No more messages in this session.");
break; // Exit the inner loop if no more messages are available
}

var messageBody = Encoding.UTF8.GetString(message.Body);
Console.WriteLine($"Received message: {messageBody}");

var success = await SendDataToApiAsync(messageBody);
if (!success)
{
await sessionReceiver.AbandonMessageAsync(message);
}
else
{
await sessionReceiver.CompleteMessageAsync(message);
}
}

await sessionReceiver.CloseAsync();
});

sessionTasks.Add(task); // Track the task for this session
}
else
{
Console.WriteLine("No sessions available to process.");
}

// Clean up completed tasks to avoid memory leaks
sessionTasks.RemoveAll(t => t.IsCompleted);

await Task.Delay(1000, stoppingToken);  // Wait before checking for the next session
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred: {ex.Message}");
}
}
}

private async Task SendDataToApiAsync(string message)
{
await _throttle.WaitAsync();  // Wait to enter the semaphore
try
{
using var httpClient = new HttpClient();
var content = new StringContent(message, Encoding.UTF8, "application/json");

try
{
var response = await httpClient.PostAsync(_apiUrl, content);
return response.IsSuccessStatusCode;
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP Request failed: {e.Message}");
return false;  // Log and handle HTTP request errors appropriately
}
}
finally
{
_throttle.Release();  // Ensure semaphore is always released
}
}
}
Какая может быть возможная причина этого? Я знаю, что могу объединить их оба в один, но опять же хочу знать, что-то не так с текущим потоком или с его просто ресурсами?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-net-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с тайм-аутом веб-сайта при запуске двух одинаковых фоновых служб .NET Core
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Каталог служб WSO2 4.3.0 (произошла ошибка при получении служб из каталога служб.)
    Anonymous » » в форуме Apache
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Каталог служб WSO2 4.3.0 (произошла ошибка при получении служб из каталога служб.)
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Запуск нескольких фоновых служб ASP.NET Core
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Запуск нескольких фоновых служб ASP.NET Core
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»