2017-02-09 230 views
0

我有一個Azure服務總線隊列。當我將文件發送到此隊列時,它將進入其死信隊列。當我嘗試從DLQ重新提交消息(文件)到其原始隊列時,它又回到DLQ,但是現在該文件的內容正在獲取垃圾郵件。誰能幫我這個?Azure服務總線DeadLetter隊列

重新提交的代碼如下。

string connectionString = ConfigurationManager.AppSettings["connectionString"]; 

string queueName = ConfigurationManager.AppSettings["deadLetterQueueName"]; 

ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(connectionString); 

MessagingFactory factory = MessagingFactory.CreateFromConnectionString(builder.ToString()); 

var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 

string queueDeadletterPath = QueueClient.FormatDeadLetterPath(queueName); 

QueueClient deadletterQueueClient = factory.CreateQueueClient(queueDeadletterPath); 


      while (true) 
      { 
       BrokeredMessage msg = deadletterQueueClient.Receive(); 
       if (msg != null) 
       { 
        try 
        { 
         if(msg.Label == "Resubmitted") 
         { 
          msg.Complete(); 
         } 
         else 
         { 
          BrokeredMessage sendMsgBackToQueue = new BrokeredMessage(msg); 
          foreach(var prop in msg.Properties) 
          { 
           var targetProp = new KeyValuePair<string, object>(prop.Key, prop.Value); 
           sendMsgBackToQueue.Properties.Add(targetProp); 
          } 
          sendMsgBackToQueue.Label = "Resubmitted"; 
          Console.WriteLine("Message Resubmitted"); 
          client.SendAsync(sendMsgBackToQueue); 
          msg.Complete(); 
         } 
        } 
        catch (Exception ex) 
        { 
         // Log error 
         Console.WriteLine(ex.Message); 
         msg.Abandon(); 
        } 
       } 
       else 
       { 
        break; 
       } 
      } 

Screenshot

+0

你有沒有試過這個建議? –

回答

1

你使用BrokeredMessage(serializedObject)構造假定你傳遞的有效負載(消息體)序列化,而不是從複製信息的消息。

ASB SDK有一個專用的BrokeredMessage.Clone()只是爲了這個目的。

注意:注意到你正在混合異步和同步調用。無論ASB如何,這都會讓你陷入麻煩。可能要切換到同步或通過await進行正確的異步調用。

相關問題