ServiceBusReceiverClient クラス
- java.
lang. Object - com.
azure. messaging. servicebus. ServiceBusReceiverClient
- com.
実装
public final class ServiceBusReceiverClient
implements AutoCloseable
Azure Service Busのキューまたはトピック/サブスクリプションからの受信をServiceBusReceivedMessage担当する同期レシーバー。
このドキュメントに示す例では、認証に DefaultAzureCredential という名前の資格情報オブジェクトを使用します。これは、ローカルの開発環境や運用環境を含むほとんどのシナリオに適しています。 さらに、運用環境での認証に マネージド ID を 使用することをお勧めします。 認証のさまざまな方法とそれに対応する資格情報の種類の詳細については、 Azure ID のドキュメントを参照してください。
サンプル: 受信者を作成してメッセージを受信する
次のコード サンプルは、Service Bus サブスクリプションからメッセージを受信するための同期クライアント ServiceBusReceiverClient の作成と使用を示しています。 受信操作では、10 個のメッセージが受信されたか、30 秒が経過したときにが返されます。 既定では、 を使用して PEEK_LOCK メッセージを受信し、顧客は受信側クライアントの決済方法のいずれかを使用してメッセージを決済する必要があります。 "受信操作の決済" は、メッセージの受け取りに関する追加情報を提供します。
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
// 'fullyQualifiedNamespace' will look similar to "{your-namespace}.servicebus.windows.net"
ServiceBusReceiverClient receiver = new ServiceBusClientBuilder()
.credential(fullyQualifiedNamespace, tokenCredential)
.receiver()
.topicName(topicName)
.subscriptionName(subscriptionName)
.buildClient();
// Receives a batch of messages when 10 messages are received or until 30 seconds have elapsed, whichever
// happens first.
IterableStream<ServiceBusReceivedMessage> messages = receiver.receiveMessages(10, Duration.ofSeconds(30));
messages.forEach(message -> {
System.out.printf("Id: %s. Contents: %s%n", message.getMessageId(), message.getBody());
// If able to process message, complete it. Otherwise, abandon it and allow it to be
// redelivered.
if (isMessageProcessed) {
receiver.complete(message);
} else {
receiver.abandon(message);
}
});
// When program ends, or you're done receiving all messages, dispose of the receiver.
// Clients should be long-lived objects as they
// require resources and time to establish a connection to the service.
receiver.close();
メソッドの概要
メソッドの継承元: java.lang.Object
メソッドの詳細
abandon
public void abandon(ServiceBusReceivedMessage message)
を破棄します ServiceBusReceivedMessage。 これにより、メッセージを再び処理できるようになります。 メッセージを破棄すると、メッセージの配信数が増えます。
Parameters:
abandon
public void abandon(ServiceBusReceivedMessage message, AbandonOptions options)
を ServiceBusReceivedMessage 破棄し、メッセージのプロパティを更新します。 これにより、メッセージを再び処理できるようになります。 メッセージを破棄すると、メッセージの配信数が増えます。
Parameters:
close
public void close()
サービスへの基になるリンクを閉じて、コンシューマーを破棄します。
commitTransaction
public void commitTransaction(ServiceBusTransactionContext transactionContext)
トランザクションとそのトランザクションに関連付けられているすべての操作をコミットします。
トランザクションの作成と使用
ServiceBusTransactionContext transaction = receiver.createTransaction();
// Process messages and associate operations with the transaction.
ServiceBusReceivedMessage deferredMessage = receiver.receiveDeferredMessage(sequenceNumber);
receiver.complete(deferredMessage, new CompleteOptions().setTransactionContext(transaction));
receiver.abandon(receivedMessage, new AbandonOptions().setTransactionContext(transaction));
receiver.commitTransaction(transaction);
Parameters:
complete
public void complete(ServiceBusReceivedMessage message)
を完了します ServiceBusReceivedMessage。 これにより、サービスからメッセージが削除されます。
Parameters:
complete
public void complete(ServiceBusReceivedMessage message, CompleteOptions options)
を完了します ServiceBusReceivedMessage。 これにより、サービスからメッセージが削除されます。
Parameters:
createTransaction
public ServiceBusTransactionContext createTransaction()
Service Bus で新しいトランザクションを開始します。 は ServiceBusTransactionContext 、このトランザクションに含める必要があるすべての操作に渡す必要があります。
サンプル: トランザクションの作成と使用
ServiceBusTransactionContext transaction = receiver.createTransaction();
// Process messages and associate operations with the transaction.
ServiceBusReceivedMessage deferredMessage = receiver.receiveDeferredMessage(sequenceNumber);
receiver.complete(deferredMessage, new CompleteOptions().setTransactionContext(transaction));
receiver.abandon(receivedMessage, new AbandonOptions().setTransactionContext(transaction));
receiver.commitTransaction(transaction);
Returns:
deadLetter
public void deadLetter(ServiceBusReceivedMessage message)
ServiceBusReceivedMessageを配信不能サブキューに移動します。
Parameters:
deadLetter
public void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)
ServiceBusReceivedMessage配信不能の理由、エラーの説明、または変更されたプロパティを使用して、 を配信不能サブキューに移動します。
Parameters:
defer
public void defer(ServiceBusReceivedMessage message)
を延期します ServiceBusReceivedMessage。 これにより、メッセージが遅延サブキューに移動されます。
Parameters:
defer
public void defer(ServiceBusReceivedMessage message, DeferOptions options)
変更されたメッセージ プロパティで ServiceBusReceivedMessage ロック トークンを使用して を遅延します。 これにより、メッセージが遅延サブキューに移動されます。
Parameters:
getEntityPath
public String getEntityPath()
このクライアントが操作する Service Bus リソースを取得します。
Returns:
getFullyQualifiedNamespace
public String getFullyQualifiedNamespace()
接続が関連付けられている完全修飾 Service Bus 名前空間を取得します。 これは、 と似ている可能性があります {yournamespace}.servicebus.windows.net
。
Returns:
getIdentifier
public String getIdentifier()
のインスタンス ServiceBusReceiverClientの識別子を取得します。
Returns:
getSessionId
public String getSessionId()
このレシーバーがセッション レシーバーの場合は、セッションの SessionId を取得します。
Returns:
getSessionState
public byte[] getSessionState()
このレシーバーがセッション レシーバーの場合は、セッションの状態を取得します。
Returns:
peekMessage
public ServiceBusReceivedMessage peekMessage()
受信側またはメッセージ ソースの状態を変更せずに、次のアクティブなメッセージを読み取ります。 を最初に peekMessage()
呼び出すと、この受信側の最初のアクティブ メッセージがフェッチされます。 後続の呼び出しのたびに、エンティティ内の後続のメッセージがフェッチされます。
Returns:
peekMessage
public ServiceBusReceivedMessage peekMessage(long sequenceNumber)
指定したシーケンス番号から、受信側またはメッセージ ソースの状態を変更せずに、アクティブなメッセージの次を読み取ります。
Parameters:
Returns:
peekMessages
public IterableStream
受信側またはメッセージ ソースの状態を変更せずに、アクティブなメッセージの次のバッチを読み取ります。
Parameters:
Returns:
peekMessages
public IterableStream
指定したシーケンス番号から、受信側またはメッセージ・ソースの状態を変更せずに、アクティブ・メッセージの次のバッチを読み取ります。
Parameters:
Returns:
receiveDeferredMessage
public ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)
遅延 ServiceBusReceivedMessageを受け取ります。 遅延メッセージは、シーケンス番号を使用してのみ受信できます。
Parameters:
Returns:
sequenceNumber
を含む遅延メッセージ。receiveDeferredMessageBatch
public IterableStream
遅延 ServiceBusReceivedMessageのバッチを受け取ります。 遅延メッセージは、シーケンス番号を使用してのみ受信できます。
Parameters:
Returns:
receiveMessages
public IterableStream
Service Bus エンティティから の許容ストリーム ServiceBusReceivedMessage を受信します。 受信操作は、メッセージを受信するまで既定の 1 分間待機してからタイムアウトします。を使用 receiveMessages(int maxMessages, Duration maxWaitTime)してオーバーライドできます。
クライアントは、その下にある AMQP リンクを使用してメッセージを受信します。現在の AMQP リンクで再トリable エラーが発生した場合、クライアントは透過的に新しい AMQP リンクに移行します。 クライアントで再試行不可能なエラーが発生した場合、または再試行が使い果たされると、receiveMessages API のそれ以上の呼び出しによって返された の繰り返し (forEach など) IterableStream<T> によって、エラーがアプリケーションにスローされます。 アプリケーションがこのエラーを受け取ったら、アプリケーションはクライアントをリセットする必要があります。つまり、現在 ServiceBusReceiverClient の クライアントを閉じて、メッセージの受信を続けるために新しいクライアントを作成します。
注: 再取得できないエラーのいくつかの例は、アプリケーションが存在しないキューへの接続を試みている、受信中にキューを削除または無効にする、ユーザーが Geo-DR を明示的に開始するなどです。 これらは、Service Bus がクライアントと通信して、再取得不可能なエラーが発生した特定のイベントです。
Parameters:
Returns:
maxMessages
のメッセージの 。receiveMessages
public IterableStream
Service Bus エンティティから の許容ストリーム ServiceBusReceivedMessage を受信します。 の作成時に変更されない限り、既定のServiceBusReceiverClientServiceBusReceiverClientBuilder#receiveMode(ServiceBusReceiveMode)受信モードは PEEK_LOCK です。
クライアントは、その下にある AMQP リンクを使用してメッセージを受信します。現在の AMQP リンクで再トリable エラーが発生した場合、クライアントは透過的に新しい AMQP リンクに移行します。 クライアントで再試行不可能なエラーが発生した場合、または再試行が使い果たされると、receiveMessages API のそれ以上の呼び出しによって返された の繰り返し (forEach など) IterableStream<T> によって、エラーがアプリケーションにスローされます。 アプリケーションがこのエラーを受け取ったら、アプリケーションはクライアントをリセットする必要があります。つまり、現在 ServiceBusReceiverClient の クライアントを閉じて、メッセージの受信を続けるために新しいクライアントを作成します。
注: 再取得できないエラーのいくつかの例は、アプリケーションが存在しないキューへの接続を試みている、受信中にキューを削除または無効にする、ユーザーが Geo-DR を明示的に開始するなどです。 これらは、Service Bus がクライアントと通信して、再取得不可能なエラーが発生した特定のイベントです。
Parameters:
Returns:
maxMessages
のメッセージの 。renewMessageLock
public OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)
指定したメッセージのロックを更新します。 ロックは、エンティティで指定された設定に基づいて更新されます。 メッセージがモードで PEEK_LOCK 受信されると、キューの作成 (LockDuration) 中に指定された期間、この受信側インスタンスのサーバーでメッセージがロックされます。 メッセージの処理にこの期間より長い時間が必要な場合は、ロックを更新する必要があります。 更新ごとに、ロックはエンティティの LockDuration 値にリセットされます。
Parameters:
Returns:
renewMessageLock
public void renewMessageLock(ServiceBusReceivedMessage message, Duration maxLockRenewalDuration, Consumer
指定されたロックを使用してメッセージの自動ロック更新を開始します。
Parameters:
renewSessionLock
public OffsetDateTime renewSessionLock()
このレシーバーがセッション レシーバーの場合は、セッションの状態を設定します。
Returns:
renewSessionLock
public void renewSessionLock(Duration maxLockRenewalDuration, Consumer
このレシーバーが動作するセッションの自動ロック更新を開始します。
Parameters:
rollbackTransaction
public void rollbackTransaction(ServiceBusTransactionContext transactionContext)
指定されたトランザクションと、それに関連付けられているすべての操作をロールバックします。
トランザクションの作成と使用
ServiceBusTransactionContext transaction = receiver.createTransaction();
// Process messages and associate operations with the transaction.
ServiceBusReceivedMessage deferredMessage = receiver.receiveDeferredMessage(sequenceNumber);
receiver.complete(deferredMessage, new CompleteOptions().setTransactionContext(transaction));
receiver.abandon(receivedMessage, new AbandonOptions().setTransactionContext(transaction));
receiver.commitTransaction(transaction);
Parameters:
setSessionState
public void setSessionState(byte[] sessionState)
このレシーバーがセッション レシーバーの場合は、セッションの状態を設定します。
Parameters:
適用対象
Azure SDK for Java