エクスポート (0) 印刷
すべて展開
このトピックはまだ評価されていません - このトピックを評価する

BrokeredMessage.Defer メソッドの使用方法

BrokeredMessage クラスを使用する場合、Defer メソッドを使用してメッセージをキューに残すことができます。 保留されたメッセージは、ユーザーの判断で後で処理することができます。 メッセージの遅延は、メッセージの優先順位を付けたり、他のプロセスに依存するメッセージを遅らせる場合に役立ちます。 メッセージの処理後、Complete メソッドを呼び出してキューからメッセージを削除します。

Defer または Complete メソッドのいずれかを使用するには、キュー クライアントのモードを ReceiveMode.PeekLock に設定します。 MessagingFactory クラスの CreateQueueClient メソッドを呼び出してモードを設定します。

メッセージを遅延させる場合、メッセージの SequenceNumber をコレクションに追加します。 メッセージを取得するには、QueueClient クラスの Receive メソッドを呼び出します。 メッセージのシーケンス番号を引数として Receive メソッドに渡します。

note
メッセージを再呼び出しできるように、シーケンス番号を永続的なストアに保存します。 この操作を行わなければ、プロセスに失敗した場合に遅延メッセージの記録は失われます。

遅延を終了するには、必要に応じて各メッセージで Complete メソッドを呼び出します。

Defer メソッドを示すサンプル アプリは、 Brokered Messaging: Deferred Messages を参照してください。

キュー クライアントを作成するには

  1. 次の名前空間に参照を追加します。

    using Microsoft.ServiceBus.Messaging;
    using Microsoft.ServiceBus;
    
    
  2. MessagingFactory インスタンスを作成し、CreateQueueClient メソッドを呼び出します。 MessagingFactory を作成するには、Azure 管理ポータルから Service Bus 名前空間 URI、発行者名 (既定は「owner」)、アクセス キーを取得します。

    private static QueueClient CreateQueueClient(string queueName) 
    {
        // The serviceBusNamespace and serviceBusIssuerKey return the values specific to an Azure account. 
        string serviceBusIssuerKey = "yourServiceBusIssuerKey";
        string serviceBusNamespace = "yourServiceBusNamespace";
        string serviceBusIssuerName = "owner" ' The default is 'owner'.
        Uri runtimeUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusNamespace, string.Empty);
        MessagingFactory messagingFactory = MessagingFactory.Create(runtimeUri, 
            TokenProvider.CreateSharedSecretTokenProvider(serviceBusIssuerName, serviceBusIssuerKey));
        return messagingFactory.CreateQueueClient(queueName,ReceiveMode.PeekLock); 
    } 
    
    

メッセージを遅延するには

  1. 数値を保存する long 型の汎用の List を作成します。

    List<long> deferredSequenceNumbers = new List<long>();
    
  2. クライアントの Receive メソッドを呼び出します。 各メッセージの遅延基準を確認し、必要に応じて Defer メソッドを呼び出します。 List コレクションにシーケンス番号を追加します。

    BrokeredMessage receivedMessage = queueClient.Receive(TimeSpan.FromSeconds(10));
        if (receivedMessage == null)
        {
            break;
        }
        else
        {
            // Low-priority messages will be dealt with later:
            if (receivedMessage.Properties["Priority"].ToString() == "Low")
            {
               receivedMessage.Defer();
               Console.WriteLine("Deferred message with id {0}.", receivedMessage.MessageId);
               // Deferred messages can only be retrieved by message receipt. Here, keeping track of the
               // message receipt for a later retrieval: 
               deferredSequenceNumbers.Add(receivedMessage.SequenceNumber);
         }
         else
         {
               ProcessMessage(receivedMessage);
         }
      
    
    
    Dim receivedMessage As BrokeredMessage = myQueueC.Receive(TimeSpan.FromSeconds(10))
    If receivedMessage Is Nothing Then
        Resume
     Else
     
        ' Low-priority messages will be dealt with later:
        If receivedMessage.Properties("Priority").ToString() = "Low" Then
     
         receivedMessage.Defer()
         Console.WriteLine("Deferred message with id {0}.", receivedMessage.MessageId)
         ' Deferred messages can only be retrieved by message receipt. Here, keeping track of the
         '  message receipt for a later retrieval: 
         deferredSequenceNumbers.Add(receivedMessage.SequenceNumber)
        Else
            ProcessMessage(receivedMessage)
        End If
     End If
    
    

遅延メッセージを処理するには

  1. Receive メソッドを使用してシーケンス番号のコレクションを反復処理します。

    foreach (long sequenceNumber in deferredSequenceNumbers)
    {
        ProcessMessage(queueClient.Receive(sequenceNumber));
    }
    
  2. ProcessMessage メソッドが各メッセージで Complete メソッドを呼び出します。

    private static void ProcessMessage(BrokeredMessage message)
    {
        // To do: code to process the message.
        message.Complete();
    }
    
    

Defer メソッドを示すサンプル アプリは、 Brokered Messaging: Deferred Messages を参照してください。

参照

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました

コミュニティの追加

追加
表示:
© 2014 Microsoft. All rights reserved.