Можем ли мы превратить сообщения из очереди мертвых писем в активные сообщения? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть точка net код, который считывает номера займов из очереди обслуживания Azure и вызывает мой API для каждого номера займа.

Это мой код, который вызывает API

private async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            try
            {
                string loanNumber = Encoding.UTF8.GetString(message.Body);
                _logger.LogInformation($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} LoanNumber:{loanNumber}");

                //API CALL HERE
               await _apiClient.getResult(loanNumber);
               await _queueClient.CompleteAsync(message.SystemProperties.LockToken);
            }
            catch (Exception ex)
            {
                //sending failed messages to Dead Letter queue
                await _queueClient.AbandonAsync(message.SystemProperties.LockToken);
            }
        }

Неудачные номера ссуд успешно отправлены в очередь Dead Letter. Когда сервер не работает или неверный запрос от ответа API.

Я хочу вызвать API после определенной продолжительности по номерам ссуд, которые находятся в очереди недоставленных сообщений. Есть ли способ преобразовать сообщения из очереди мертвых писем в активные сообщения через определенный промежуток времени?

Я новичок в azure. Пожалуйста, помогите мне решить проблему.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

Есть ли способ через некоторое время преобразовать сообщения из очереди мертвых писем в активные сообщения ??

Автоматически, нет. Однако, что вы можете сделать, это прочитать сообщения из очереди недоставленных сообщений, а затем опубликовать их как новое сообщение в вашей основной очереди.

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

0 голосов
/ 18 апреля 2020

Нет, нет способа преобразовать сообщение DLQ в активное сообщение.

вам нужно обработать DLQ и установить причину, по которой он закончился в DLQ, а затем повторно передать его обратно в вашу очередь .

Здесь может быть полезен образец из Github.

https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/Microsoft.ServiceBus.Messaging/DeadletterQueue

(Этот пример показывает, как переместить сообщения в мертвую букву очередь, как извлечь из нее сообщения и повторно отправить исправленное сообщение обратно в основную очередь.)

0 голосов
/ 18 апреля 2020

@ akhil, стоит отметить, что эти сообщения будут автоматически помещаться в очередь в главной очереди, пока их DeliveryCount не превысит MaxDeliveryCount вашей основной очереди. Значение по умолчанию для MaxDeliveryCount равно 10, поэтому любой обработчик неудачных запросов к API будет повторен десять раз этим обработчиком перед перемещением в DLQ.

Если вы хотите быть немного «умнее» в этом, вы можете задержать повторные попытки, используя свойство Scheduled​Enqueue​Time​Utc в сообщении в вашем блоке catch.

Как сказал @Gaurav Mantri, среда не предлагает ничего для обработки сообщений с "мертвыми буквами" для бесплатно'; вам придется самостоятельно кодировать обработчик, как для обычной очереди.

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