0

데드 레터 대기열에있는 모든 메시지를 가져 와서 엿볼 수있는 좋은 문서를 찾는 것은 매우 어렵습니다. Azure 서비스 버스 대기열이 있습니다. 내가 찾을 수있는 모든 것은 서비스 버스 주제입니다 ... 누군가가 빠른 가이드로 나를 도울 수 있습니까?데드 레터 메시지를 들여다 보는 방법

답변

3

데드 - 레터 큐는 포이즌 메시지가 이동되는 2 차 서브 큐입니다. 하늘색 서비스 버스 대기열의 경우 DLQ의 표준 경로는 queuePath/$ DeadLetterQueue입니다. 이 DLQ를 읽으려면 다른 대기열이 필요합니다.

그리고 .net 클라이언트에서 이와 같은 작업을 수행하게됩니다.

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

하지만 정말 topicPath가 무엇인지 단서가 없다 : 여기

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

죄송합니다. 큐 클라이언트로 코드를 업데이트했습니다. 웬일인지 당신이 주제와 잠수함을 구했던 것. – Aravind

+0

는 while 루프에 올 때 흠이 나에게 다음과 같은 오류를 제공합니다 : 40103 : 잘못된 인증 토큰 서명, 감사하지만 형 'System.UnauthorizedAccessException'형식의 처리되지 않은 예외가 추가 정보 Microsoft.ServiceBus.dll 발생 ! –

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

는 픽을 사용하여 데드 레터 큐에있는 모든 메시지의 목록을 얻을 수있는 방법의 예입니다? 이것은 대기열이며 주제가 아니기 때문에?