0

Это очень трудно найти хорошую документацию на получение всех сообщений в очереди deadletter, и добраться до взглянуть на них. У меня есть очередь служебных шин Azure. Все, что я могу найти, это темы сервис-автобусов ... Может ли кто-нибудь помочь мне с помощью быстрого руководства?Как заглянуть в deadletter сообщения

ответ

3

Мертвый очередь письмо является вторичным суб-очереди, где сообщения отравляют перемещаются. В случае очереди служебной шины azure стандартным путем для DLQ является queuePath/$ DeadLetterQueue. Итак, вам нужно иметь еще один queueclient для чтения этого DLQ.

И вы будете делать что-то подобное в .net клиентов.

string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 
QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, "QueueName"); 
// do whatever regular queue reading activities 

// this is for dead letter queue 
    QueueClient deadLetterClient = QueueClient.CreateFromConnectionString(connectionString, QueueClient.FormatDeadLetterPath(Client.Path), ReceiveMode.ReceiveAndDelete); 
      BrokeredMessage receivedDeadLetterMessage; 

      while ((receivedDeadLetterMessage = deadLetterClient.Receive(TimeSpan.FromSeconds(10))) != null) 
      { 
       Console.WriteLine(receivedDeadLetterMessage); 
      } 
+0

Но я действительно не имею ни малейшего понятия, что topicPath есть? Так как это очередь, а не тема? –

+0

извините. Я обновил код с помощью клиента очереди. по какой-то причине я думал, что вы попросили тему и субтитры. – Aravind

+0

Мда это дает мне следующую ошибку, когда речь идет время цикла: Необработанное исключение типа «System.UnauthorizedAccessException» произошло в Microsoft.ServiceBus.dll Дополнительная информация: 40103: Invalid авторизации маркер подписи, Спасибо хоть ! –

0
string connectionString = ConfigurationManager.AppSettings["connectionString"];  
string queueName = ConfigurationManager.AppSettings["queueName"];  
ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(connectionString);  
MessagingFactory factory = MessagingFactory.CreateFromConnectionString(builder.ToString());  
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);  
string deadLetterQueuePath = QueueClient.FormatDeadLetterPath(queueName);  
QueueClient deadletterQueueClient = factory.CreateQueueClient(deadLetterQueuePath);  
while (true)  
{  
     BrokeredMessage brokeredMessage = deadletterQueueClient.Receive();  
     // Your Logic  
} 
0

Вот пример того, как вы можете получить список всех сообщений в мертвой очереди письма с помощью Peek:

public async Task<IEnumerable<BrokeredMessage>> GetDeadLetterMessagesAsync(string connectionString, 
    string queueName) 
{ 
    var queue = QueueClient.CreateFromConnectionString(connectionString, QueueClient.FormatDeadLetterPath(queueName)); 
    var messageList = new List<BrokeredMessage>(); 
    BrokeredMessage message; 
    do 
    { 
     message = await queue.PeekAsync(); 
     if (message != null) 
     { 
      messageList.Add(message); 
     } 
    } while (message != null); 
    return messageList; 
} 
Смежные вопросы