0

Es ist sehr schwierig, eine gute Dokumentation über das Abrufen aller Nachrichten in einer Deadletter-Warteschlange zu finden und einen Blick darauf zu werfen. Ich habe eine Azure Service-Bus-Warteschlange. Alles, was ich finden kann, ist für Service-Bus-Themen ... Kann mir jemand mit einer Kurzanleitung helfen?So sehen Sie die Deadletter-Nachrichten

Antwort

3

Die Warteschlange für unzustellbare Nachrichten ist eine sekundäre Unterwarteschlange, in die die Giftnachrichten verschoben werden. Im Falle einer azure Service Bus Queue ist der Standardpfad für DLQ queuePath/$ DeadLetterQueue. Sie müssen also einen anderen Queueclient haben, um diese DLQ zu lesen.

Und Sie werden so etwas in. NET-Clients tun.

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

Aber ich habe wirklich keine Ahnung, was der topicPath ist? Da dies eine Warteschlange und kein Thema ist? –

+0

Entschuldigung. Ich habe den Code mit dem Warteschlangenclient aktualisiert. Aus irgendeinem Grund dachte ich, du hättest nach Themen und Subs gefragt. – Aravind

+0

Hmm das mir die folgende Fehlermeldung, wenn es um die while-Schleife kommt: Eine nicht behandelte Ausnahme des Typs ‚System.UnauthorizedAccessException‘ aufgetreten in Microsoft.ServiceBus.dll Zusätzliche Informationen: 40103: Ungültige Autorisierungs-Token Unterschrift, Dank obwohl ! –

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

Hier ist ein Beispiel dafür, wie Sie eine Liste aller Nachrichten in der Warteschlange für unzustellbare mit Peek zu bekommen:

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; 
}