ServiceBusSessionReceiverClient クラス
- java.
lang. Object - com.
azure. messaging. servicebus. ServiceBusSessionReceiverClient
- com.
実装
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();
}
メソッドの概要
修飾子と型 | メソッドと説明 |
---|---|
Service |
acceptNextSession()
次に使用可能なセッションのセッション ロックを取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。 |
Service |
acceptSession(String sessionId)
のセッション ロック |
void | close() |
メソッドの継承元: java.lang.Object
メソッドの詳細
acceptNextSession
public ServiceBusReceiverClient acceptNextSession()
次に使用可能なセッションのセッション ロックを取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。 すぐに使用できるユーザーがいない場合は、セッションが使用可能になるまで待機します。
Returns:
acceptSession
public ServiceBusReceiverClient acceptSession(String sessionId)
のセッション ロック sessionId
を取得し、セッションからメッセージを受信する を作成 ServiceBusReceiverClient します。 セッションが既に別のクライアントによってロックされている場合は、 AmqpException がすぐにスローされます。
Parameters:
Returns:
close
public void close()
適用対象
Azure SDK for Java