2016-12-22 6 views
0

Azureサービスバスの再試行ポリシーを理解しようとしていますが、期待通りの動作をしていません。私は両方のメッセージをリッスンし、特定の空白のキューにメッセージを送信する次のコードを持っています。Azureサービスバスの再試行ポリシーは動作を変更しません

using System; 
using Microsoft.ServiceBus; 
using Microsoft.ServiceBus.Messaging; 

namespace ServiceBusTester 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var connectionString = "Endpoint=sb://<NamespaceName>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<SharedAccessKey>"; 
      var queueName = "MyTestQueue"; 

      var retryPolicy = new RetryExponential(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(30), 15); 

      var ns = NamespaceManager.CreateFromConnectionString(connectionString); 
      ns.Settings.RetryPolicy = retryPolicy; 

      if (!ns.QueueExists(queueName)) 
       ns.CreateQueue(queueName); 

      var mf = MessagingFactory.CreateFromConnectionString(connectionString); 
      mf.RetryPolicy = retryPolicy; 

      var mr = mf.CreateMessageReceiver(queueName); 
      mr.RetryPolicy = retryPolicy; 

      var retryCount = 0; 

      mr.OnMessage(_ => 
      { 
       retryCount++; 
       Console.WriteLine($"{retryCount.ToString().PadLeft(4, ' ')} - Message Received: {_.GetBody<string>()}"); 
       _.Abandon(); 
      }, new OnMessageOptions() { AutoComplete = true }); 


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

      var message = new BrokeredMessage("This is a test message!"); 

      client.Send(message); 

      Console.WriteLine("Press any key to exit..."); 
      Console.ReadKey(); 
     } 
    } 
} 

リトライポリシーを15回再試行するように指定していますが、まだデフォルトの10回だけ再試行しています。私はNoRetryポリシーを使ってみましたが、まだ10回再試行します。

Console output

私はまた、キュー上Maximum Delivery Countは、任意の多数に設定したが、それは何も変更しなかったことを検証:

enter image description here

私はきた確信しています多くの異なるクライアント/工場にリトライポリシーを割り当てて外に出たが、ここで何が間違っているのか分からない。

答えて

3

RetryExponentialは、すぐにコードにバブリングされない一時的なエラーがある場合にASBクライアントによって使用されることを意図しています。私。例外が発生する前にクライアントに再試行する内部再試行メカニズム。 のコールバックが明示的にメッセージを放棄する場合、ここではリトライポリシーも使用されず、メッセージは通常の配送までMaxDeliveryCount回(シナリオでは50)までDLQされます。

リトライポリシーを使用して、メッセージをデキューできる回数ではなく、あきらめる前に一時的なエラーを処理する方法をASBクライアントに指定します。

+0

よろしくお願いいたします。私はSOにアップロードする前に私のアプリケーションのキュー名を変更して、Max Delivery Countを変更するのを忘れました。指定したとおりに動作します。 –

+0

ところで、回答に記載された内容を説明するドキュメントはどこにありますか? –

+0

これはいくつかの良い情報を提供するはずです:https://docs.microsoft.com/en-us/azure/best-practices-retry-service-specific#service-bus-retry-guidelines –

関連する問題