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