Azure сервисный автобус |Повторно обрабатывать сообщения о мертвых письмах обратно в очередь |Как получить все сообщения из очереди недоставленных писем? - PullRequest
0 голосов
/ 17 октября 2019

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

        var msRequestIdArg = MsRequestIds.Split('\n').Select(e => e.Trim()).ToList();
        var msRootRequestArg = MsRootRequestIds.Split('\n').Select(e => e.Trim()).ToList();
        var queueClient = QueueClient.CreateFromConnectionString(ServiceBusConnectionString, QueueName);
        var factory = MessagingFactory.CreateFromConnectionString(ServiceBusConnectionString);
        var deadLetterPath = QueueClient.FormatDeadLetterPath(QueueName);
        var deadLetterQueueReceiver = factory.CreateMessageReceiver(deadLetterPath, ReceiveMode.PeekLock);
        deadLetterQueueReceiver.PrefetchCount = 10;
        var messageResponse = new List<Tuple<string, bool, string>>();
        var counter = msRequestIdArg.Count + msRootRequestArg.Count;

        while (counter > 0)
        {
            var brokeredMessage = await deadLetterQueueReceiver.ReceiveAsync().ConfigureAwait(false);

1 Ответ

0 голосов
/ 17 октября 2019

Краткий ответ: вы не можете и не должны.

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

...