Мой приемник служебной шины Azure закрывается из-за тайм-аута простоя, и я не нашел способа это исправить.C#

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

Сообщение Anonymous »


У меня есть довольно простое приложение .NET 6, единственная цель которого — получать сообщения от служебной шины Azure и обрабатывать их. Когда мое приложение работает, я очень доволен результатом, и оно соответствует ожидаемой мной бизнес-логике.

Дело в том, что после прослушивания сообщения и его обработки мой приемник служебной шины Azure отключается, и ссылка закрывается.

Вот несколько журналов моего развернутого приложения (это образ Docker, развернутый на AKS через jenkins/argocd для информации):

информация: Inventory_Create_Worker.API.Consumer.CreateInventoryConsumerService[0] Сообщение получено и обработано: {"Title":"событие создания инвентаря","Description":"Извлечение из файла Excel","Событие":":CONFIDENTIAL_INVENTORY_DATA"} информация: Azure.Messaging.ServiceBus[38] Ссылка на прием закрыта. Идентификатор: очередь-инвентаризация-создание-dev-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx, SessionId: , linkException: Azure.Messaging.ServiceBus.ServiceBusException: ссылка 'amqps://personaldevservicebus-development.servicebus.windows.net/-f1a43db3;0:5:6:source(address:/queue-inventory-creation- dev,filter:[])' является принудительно отделенным. Код: агрегат-ссылка1318524517. Подробности: AmqpMessagePartitioningEntityMessageCache.IdleTimerExpired: тайм-аут простоя в секундах: 900. (Общая ошибка). Информацию об устранении неполадок см. на странице https://aka.ms/azsdk/net/servicebus/Exc ... oubleshoot.. Вот как я внедряю в ioc IAzureClientFactory:

Services.AddAzureClients(clientsBuilder => { clientBuilder.AddServiceBusClient(connectionString:azureQueueConfig.ConnectionString) .WithName(ConfirmationCreateServiceBusClientName) .ConfigureOptions(опции => { options.RetryOptions.Delay = TimeSpan.FromSeconds(2); options.RetryOptions.MaxDelay = TimeSpan.FromMinutes(2); options.ConnectionIdleTimeout = TimeSpan.FromMinutes(5); options.RetryOptions.MaxRetries = 5; }); }); Поначалу у меня не было .ConfigureOptions, и я чувствовал, что моя проблема, вероятно, кроется в нем.

Вот моя фоновая служба, которая принимает сообщения из служебной шины Azure:
с использованием общего; использование Shared.AzureServiceBus; использование Shared.Interfaces; использование Shared.Interfaces.Infrastructure; использование Shared.Interfaces.Provider; использование Shared.Interfaces.Service; используя Shared.Models.Config; использование Shared.RabbitMq; использование Shared.Services; использование Inventory_Create_Worker.Application.Common.Interfaces.Authentication; использование Inventory_Create_Worker.Infrastructure.Authentication; использование Inventory_Create_Worker.Shared.Constants; использование Microsoft.Extensions.Azure; использование Microsoft.Extensions.Configuration; использование Microsoft.Extensions.DependencyInjection; использование Microsoft.Extensions.Logging; использование Microsoft.Extensions.Options; использование статического Inventory_Create_Worker.Shared.Constants.AzureConstant; общедоступный класс CreateInventoryConsumerService: BackgroundService { частный только для чтения ILogger _logger; частный ServiceBusReceiver _serviceBusReceiver; частный ServiceBusClient _serviceBusClient; частный только для чтения IAzureClientFactory _azureClientFactory; частный только для чтения AzureQueueConfig _azureQueueConfig; частный только для чтения IServiceProvider _serviceProvider; public CreateInventoryConsumerService(IAzureClientFactory serviceBusClientFactory, ILogger регистратор, IOptions azureQueueOptions, поставщик услуг IServiceProvider) { _logger = регистратор; _serviceProvider = поставщик услуг; _azureClientFactory = serviceBusClientFactory; _azureQueueConfig = azureQueueOptions.Value; _serviceBusClient = _azureClientFactory.CreateClient(имя: AzureConstant.InventoryCreateServiceBusClientName); _serviceBusReceiver = _serviceBusClient.CreateReceiver(queueName: _azureQueueConfig.QueueName); } защищенное переопределение асинхронной задачи ExecuteAsync (CancellationToken StopToken) { пытаться { вар полученное сообщение = ждут _serviceBusReceiver.ReceiveMessageAsync (cancellationToken: StopToken); если (receivedMessage!= ноль) { используя (область var = _serviceProvider.CreateScope()) { вар serviceProvider = объем.ServiceProvider; вар посредник = serviceProvider.GetRequiredService(); Console.WriteLine("НАЧИНАЕМ ПОЛЬЗОВАТЬСЯ СЕРВИСОМ"); вар createInventoryEvent = Encoding.UTF8.GetString(receivedMessage.Body); Console.WriteLine("var createInventoryEvent = Encoding.UTF8.GetString DONE"); Команда CreateInventoryFromEventCommand = new(createInventoryEvent); Консоль.WriteLine( «Команда CreateInventoryFromEventCommand = new(createInventoryEvent); DONE»); ожидайте mediator.Send(команда, StopToken); Console.WriteLine("_mediator.Send(команда) DONE"); _logger.LogInformation("Сообщение получено и обработано: " + createInventoryEvent); Console.WriteLine("Сообщение получено и обработано: " + createInventoryEvent); } } } поймать (Исключение ex) { _logger.LogError($"Не удалось выполнить сообщение в Inventory_Create_Worker.CreateInventoryConsumerService.ExecuteAsync, возникло исключение: {ex.Message} )"); Console.WriteLine($"Не удалось выполнить сообщение в Inventory_Create_Worker.CreateInventoryConsumerService.ExecuteAsync, возникло исключение: {ex.Message}"); РекреатеServiceBusInstances(); } } /// /// Когда наша служебная шина выходит из строя, нам нужно ее воссоздать. /// В противном случае мы больше не прослушиваем события служебной шины Azure, и наша потребительская служба инвентаризации больше не гарантируется. /// частная пустота RecreateServiceBusInstances() { пытаться { _logger.LogInformation("Воссоздание нового ServiceBusReceiver и нового экземпляра ServiceBusClient"); Console.WriteLine("Воссоздание нового ServiceBusReceiver и нового экземпляра ServiceBusClient"); _serviceBusClient = _azureClientFactory.CreateClient(имя: AzureConstant.InventoryCreateServiceBusClientName); _serviceBusReceiver = _serviceBusClient.CreateReceiver(queueName: _azureQueueConfig.QueueName); } поймать (Исключение ex) { _logger.LogError($"Не удалось воссоздать экземпляры ServiceBus: {ex.Message}"); Console.WriteLine($"Не удалось воссоздать экземпляры ServiceBus: {ex.Message}"); } } }
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение ошибки тайм-аута — увеличьте значение тайм-аута отправки при привязке.
    Anonymous » » в форуме C#
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Получение ошибки тайм-аута — увеличьте значение тайм-аута отправки при привязке.
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • HttpClient продолжает работать после принудительного тайм-аута простоя
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • HttpClient продолжает работать после принудительного тайм-аута простоя
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • HttpClient продолжает работать после принудительного тайм-аута простоя
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

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