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

嗯,當涉及到while循環這個給我以下錯誤: 型「System.UnauthorizedAccessException的」未處理的異常在Microsoft.ServiceBus.dll發生 附加信息:雖然授權令牌無效簽名, 感謝:40103 ! –

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

下面是如何在使用皮剋死信隊列得到的所有消息列表的例子:

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