次の方法で共有


ServiceBusSessionReceiverClient クラス

  • java.lang.Object
    • com.azure.messaging.servicebus.ServiceBusSessionReceiverClient

実装

public final class ServiceBusSessionReceiverClient
implements AutoCloseable

この 同期 セッション レシーバー クライアントは、キューまたはトピックからセッション ロックを取得し、ロックされたセッションに関連付けられているインスタンスを作成 ServiceBusReceiverClient するために使用されます。 セッションは、メッセージの先入れ先出し (FIFO) 処理として使用できます。 キューとトピック/サブスクリプションは Service Bus セッションをサポートしますが、 エンティティの作成時に有効にする必要があります。

このドキュメントに示す例では、認証に DefaultAzureCredential という名前の資格情報オブジェクトを使用します。これは、ローカルの開発環境や運用環境を含むほとんどのシナリオに適しています。 さらに、運用環境での認証に マネージド ID を 使用することをお勧めします。 認証のさまざまな方法とそれに対応する資格情報の種類の詳細については、 Azure ID のドキュメントを参照してください

サンプル: 特定のセッションからメッセージを受信する

セッション ID PEEK_LOCK がわかっている場合は、 を使用してacceptSession(String sessionId)セッションのロックを取得します。メッセージの受け取りをユーザーが制御できるように強くお勧めします。

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
 // 'disableAutoComplete' indicates that users will explicitly settle their message.
 ServiceBusSessionReceiverClient sessionReceiver = new ServiceBusClientBuilder()
     .credential(fullyQualifiedNamespace, credential)
     .sessionReceiver()
     .queueName(sessionEnabledQueueName)
     .disableAutoComplete()
     .buildClient();
 ServiceBusReceiverClient receiver = sessionReceiver.acceptSession("<<my-session-id>>");

 // Keep fetching messages from the session until there are no more messages.
 // The receiveMessage operation returns when either 10 messages have been receiver or, 30 seconds have elapsed.
 boolean hasMoreMessages = true;
 while (hasMoreMessages) {
     IterableStream<ServiceBusReceivedMessage> messages =
         receiver.receiveMessages(10, Duration.ofSeconds(30));
     Iterator<ServiceBusReceivedMessage> iterator = messages.iterator();
     hasMoreMessages = iterator.hasNext();

     while (iterator.hasNext()) {
         ServiceBusReceivedMessage message = iterator.next();
         System.out.printf("Session Id: %s. Contents: %s%n.", message.getSessionId(), message.getBody());

         // Explicitly settle the message using complete, abandon, defer, dead-letter, etc.
         if (isMessageProcessed) {
             receiver.complete(message);
         } else {
             receiver.abandon(message);
         }
     }
 }

 // Use the receiver and finally close it along with the sessionReceiver.
 receiver.close();
 sessionReceiver.close();

サンプル: 使用可能な最初のセッションからメッセージを受信する

セッション ID PEEK_LOCK を指定せずに、次に使用可能なセッションのロックを取得する場合に使用acceptNextSession()します。メッセージの受け取りをユーザーが制御できるように、強くお勧めします。

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 // 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
 // 'disableAutoComplete' indicates that users will explicitly settle their message.
 ServiceBusSessionReceiverClient sessionReceiver = new ServiceBusClientBuilder()
     .credential(fullyQualifiedNamespace, credential)
     .sessionReceiver()
     .disableAutoComplete()
     .queueName(sessionEnabledQueueName)
     .buildClient();

 // Creates a client to receive messages from the first available session. It waits until
 // AmqpRetryOptions.getTryTimeout() elapses. If no session is available within that operation timeout, it
 // throws a retriable error. Otherwise, a receiver is returned when a lock on the session is acquired.
 ServiceBusReceiverClient receiver = sessionReceiver.acceptNextSession();

 // Use the receiver and finally close it along with the sessionReceiver.
 try {
     // Keep fetching messages from the session until there are no more messages.
     // The receiveMessage operation returns when either 10 messages have been receiver or, 30 seconds have elapsed.
     boolean hasMoreMessages = true;
     while (hasMoreMessages) {
         IterableStream<ServiceBusReceivedMessage> messages =
             receiver.receiveMessages(10, Duration.ofSeconds(30));
         Iterator<ServiceBusReceivedMessage> iterator = messages.iterator();
         hasMoreMessages = iterator.hasNext();

         while (iterator.hasNext()) {
             ServiceBusReceivedMessage message = iterator.next();
             System.out.printf("Session Id: %s. Message: %s%n.", message.getSessionId(), message.getBody());

             // Explicitly settle the message using complete, abandon, defer, dead-letter, etc.
             if (isMessageProcessed) {
                 receiver.complete(message);
             } else {
                 receiver.abandon(message);
             }
         }
     }
 } finally {
     receiver.close();
     sessionReceiver.close();
 }

メソッドの概要

修飾子と型 メソッドと説明
ServiceBusReceiverClient acceptNextSession()

次に使用可能なセッションのセッション ロックを取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。

ServiceBusReceiverClient acceptSession(String sessionId)

のセッション ロック sessionId を取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。

void close()

メソッドの継承元: java.lang.Object

メソッドの詳細

acceptNextSession

public ServiceBusReceiverClient acceptNextSession()

次に使用可能なセッションのセッション ロックを取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。 すぐに使用できるユーザーがいない場合は、セッションが使用可能になるまで待機します。

Returns:

ServiceBusReceiverClient使用可能なセッションに関連付けられている 。

acceptSession

public ServiceBusReceiverClient acceptSession(String sessionId)

のセッション ロック sessionId を取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。 セッションが既に別のクライアントによってロックされている場合は、 AmqpException がすぐにスローされます。

Parameters:

sessionId - セッション ID。

Returns:

ServiceBusReceiverClient指定したセッションに関連付けられている 。

close

public void close()

適用対象