Freigeben über


ServiceBusReceiverClient Klasse

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

Implementiert

public final class ServiceBusReceiverClient
implements AutoCloseable

Ein synchroner Empfänger, der für den Empfang ServiceBusReceivedMessage von einer Warteschlange oder einem Thema/Abonnement auf Azure Service Bus verantwortlich ist.

Die in diesem Dokument gezeigten Beispiele verwenden ein Anmeldeinformationsobjekt namens DefaultAzureCredential für die Authentifizierung, das für die meisten Szenarien geeignet ist, einschließlich lokaler Entwicklungs- und Produktionsumgebungen. Darüber hinaus wird die Verwendung einer verwalteten Identität für die Authentifizierung in Produktionsumgebungen empfohlen. Weitere Informationen zu verschiedenen Authentifizierungsmethoden und den entsprechenden Anmeldeinformationstypen finden Sie in der Dokumentation zu Azure Identity."

Beispiel: Erstellen eines Empfängers und Empfangen von Nachrichten

Im folgenden Codebeispiel wird die Erstellung und Verwendung des synchronen Clients ServiceBusReceiverClient zum Empfangen von Nachrichten aus einem Service Bus-Abonnement veranschaulicht. Der Empfangsvorgang wird zurückgegeben, wenn entweder 10 Nachrichten empfangen oder 30 Sekunden verstrichen sind. Standardmäßig werden Nachrichten mit PEEK_LOCK empfangen, und Kunden müssen ihre Nachrichten mit einer der Abrechnungsmethoden auf dem Empfängerclient abgleichen. " Abgleich von Empfangsvorgängen" enthält zusätzliche Informationen zur Nachrichtenabrechnung.

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();

Methodenzusammenfassung

Modifizierer und Typ Methode und Beschreibung
void abandon(ServiceBusReceivedMessage message)

Gibt ein auf ServiceBusReceivedMessage.

void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

Gibt eine auf ServiceBusReceivedMessage und aktualisiert die Eigenschaften der Nachricht.

void close()

Entsorgt den Consumer, indem die zugrunde liegenden Links zum Dienst geschlossen werden.

void commitTransaction(ServiceBusTransactionContext transactionContext)

Committent die Transaktion und alle ihr zugeordneten Vorgänge.

void complete(ServiceBusReceivedMessage message)

Schließt eine ab ServiceBusReceivedMessage.

void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Schließt eine ab ServiceBusReceivedMessage.

ServiceBusTransactionContext createTransaction()

Startet eine neue Transaktion in Service Bus.

void deadLetter(ServiceBusReceivedMessage message)

Verschiebt eine ServiceBusReceivedMessage in die Unterwarteschlange für unzustellbare Nachrichten.

void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Verschiebt eine ServiceBusReceivedMessage in die Unterwarteschlange für unzustellbare Nachrichten mit Ursache für unzustellbare Nachrichten, Fehlerbeschreibung und/oder geänderten Eigenschaften.

void defer(ServiceBusReceivedMessage message)

Verschiebt einen ServiceBusReceivedMessagezurück.

void defer(ServiceBusReceivedMessage message, DeferOptions options)

Zurückstellen eines mithilfe ServiceBusReceivedMessage des Sperrtokens mit geänderter Nachrichteneigenschaft.

String getEntityPath()

Ruft die Service Bus-Ressource ab, mit der dieser Client interagiert.

String getFullyQualifiedNamespace()

Ruft den vollqualifizierten Service Bus-Namespace ab, dem die Verbindung zugeordnet ist.

String getIdentifier()

Ruft den Bezeichner des instance von abServiceBusReceiverClient.

String getSessionId()

Ruft die Sitzungs-IDder Sitzung ab, wenn dieser Empfänger ein Sitzungsempfänger ist.

byte[] getSessionState()

Ruft den Zustand der Sitzung ab, wenn dieser Empfänger ein Sitzungsempfänger ist.

ServiceBusReceivedMessage peekMessage()

Liest die nächste aktive Nachricht, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

ServiceBusReceivedMessage peekMessage(long sequenceNumber)

Ab der angegebenen Sequenznummer liest neben der aktiven Nachricht, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

IterableStream<ServiceBusReceivedMessage> peekMessages(int maxMessages)

Liest den nächsten Batch mit aktiven Nachrichten, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

IterableStream<ServiceBusReceivedMessage> peekMessages(int maxMessages, long sequenceNumber)

Liest ab der angegebenen Sequenznummer den nächsten Batch aktiver Nachrichten, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Empfängt eine verzögerte ServiceBusReceivedMessage.

IterableStream<ServiceBusReceivedMessage> receiveDeferredMessageBatch(Iterable<Long> sequenceNumbers)

Empfängt einen Batch mit verzögertem ServiceBusReceivedMessage.

IterableStream<ServiceBusReceivedMessage> receiveMessages(int maxMessages)

Empfängt einen iterierbaren Stream von von ServiceBusReceivedMessage der Service Bus-Entität.

IterableStream<ServiceBusReceivedMessage> receiveMessages(int maxMessages, Duration maxWaitTime)

Empfängt einen iterierbaren Stream von von ServiceBusReceivedMessage der Service Bus-Entität.

OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Erneuert die Sperre für die angegebene Nachricht.

void renewMessageLock(ServiceBusReceivedMessage message, Duration maxLockRenewalDuration, Consumer<Throwable> onError)

Startet die automatische Sperrverlängerung für eine Nachricht mit der angegebenen Sperre.

OffsetDateTime renewSessionLock()

Legt den Zustand der Sitzung fest, wenn es sich bei diesem Empfänger um einen Sitzungsempfänger handelt.

void renewSessionLock(Duration maxLockRenewalDuration, Consumer<Throwable> onError)

Startet die Verlängerung der automatischen Sperre für die Sitzung, für die dieser Empfänger arbeitet.

void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Rollbacks für die angegebene Transaktion und alle ihr zugeordneten Vorgänge.

void setSessionState(byte[] sessionState)

Legt den Zustand der Sitzung fest, wenn es sich bei diesem Empfänger um einen Sitzungsempfänger handelt.

Geerbte Methoden von java.lang.Object

Details zur Methode

abandon

public void abandon(ServiceBusReceivedMessage message)

Gibt ein auf ServiceBusReceivedMessage. Dadurch wird die Nachricht wieder zur Verarbeitung zur Verfügung gestellt. Wenn Sie eine Nachricht verlassen, erhöht sich die Anzahl der Zustellungen für die Nachricht.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.

abandon

public void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

Gibt eine auf ServiceBusReceivedMessage und aktualisiert die Eigenschaften der Nachricht. Dadurch wird die Nachricht wieder zur Verarbeitung zur Verfügung gestellt. Wenn Sie eine Nachricht verlassen, erhöht sich die Anzahl der Zustellungen für die Nachricht.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.
options - Die Optionen, die beim Verlassen der Nachricht festgelegt werden sollen.

close

public void close()

Entsorgt den Consumer, indem die zugrunde liegenden Links zum Dienst geschlossen werden.

commitTransaction

public void commitTransaction(ServiceBusTransactionContext transactionContext)

Committent die Transaktion und alle ihr zugeordneten Vorgänge.

Erstellen und Verwenden einer Transaktion

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:

transactionContext - Die Transaktion, die committet werden soll.

complete

public void complete(ServiceBusReceivedMessage message)

Schließt eine ab ServiceBusReceivedMessage. Dadurch wird die Nachricht aus dem Dienst gelöscht.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.

complete

public void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Schließt eine ab ServiceBusReceivedMessage. Dadurch wird die Nachricht aus dem Dienst gelöscht.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.
options - Optionen, die zum Abschließen der Nachricht verwendet werden.

createTransaction

public ServiceBusTransactionContext createTransaction()

Startet eine neue Transaktion in Service Bus. Sollte ServiceBusTransactionContext an alle Vorgänge übergeben werden, die in dieser Transaktion erforderlich sind.

Beispiel: Erstellen und Verwenden einer Transaktion

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)

Verschiebt eine ServiceBusReceivedMessage in die Unterwarteschlange für unzustellbare Nachrichten.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.

deadLetter

public void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Verschiebt eine ServiceBusReceivedMessage in die Unterwarteschlange für unzustellbare Nachrichten mit Ursache für unzustellbare Nachrichten, Fehlerbeschreibung und/oder geänderten Eigenschaften.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.
options - Optionen, die verwendet werden, um die Nachricht unzustellbar zu machen.

defer

public void defer(ServiceBusReceivedMessage message)

Verschiebt einen ServiceBusReceivedMessagezurück. Dadurch wird die Nachricht in die verzögerte Unterwarteschlange verschoben.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.

defer

public void defer(ServiceBusReceivedMessage message, DeferOptions options)

Zurückstellen eines mithilfe ServiceBusReceivedMessage des Sperrtokens mit geänderter Nachrichteneigenschaft. Dadurch wird die Nachricht in die verzögerte Untergeordnete Warteschlange verschoben.

Parameters:

message - Der ServiceBusReceivedMessage , der diesen Vorgang ausführen soll.
options - Optionen, die zum Zurückstellen der Nachricht verwendet werden.

getEntityPath

public String getEntityPath()

Ruft die Service Bus-Ressource ab, mit der dieser Client interagiert.

Returns:

Die Service Bus-Ressource, mit der dieser Client interagiert.

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

Ruft den vollqualifizierten Service Bus-Namespace ab, dem die Verbindung zugeordnet ist. Dies ist wahrscheinlich ähnlich wie .{yournamespace}.servicebus.windows.net

Returns:

Der vollqualifizierte Service Bus-Namespace, dem die Verbindung zugeordnet ist.

getIdentifier

public String getIdentifier()

Ruft den Bezeichner des instance von abServiceBusReceiverClient.

Returns:

Der Bezeichner, der die instance von ServiceBusReceiverClientidentifizieren kann.

getSessionId

public String getSessionId()

Ruft die SessionId der Sitzung ab, wenn dieser Empfänger ein Sitzungsempfänger ist.

Returns:

Die SessionId oder NULL, wenn dies kein Sitzungsempfänger ist.

getSessionState

public byte[] getSessionState()

Ruft den Zustand der Sitzung ab, wenn dieser Empfänger ein Sitzungsempfänger ist.

Returns:

Der Sitzungszustand oder NULL, wenn kein Zustand für die Sitzung festgelegt ist.

peekMessage

public ServiceBusReceivedMessage peekMessage()

Liest die nächste aktive Nachricht, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern. Der erste Aufruf von ruft peekMessage() die erste aktive Nachricht für diesen Empfänger ab. Jeder nachfolgende Aufruf ruft die nachfolgende Nachricht in der Entität ab.

Returns:

Ein eingesehenes ServiceBusReceivedMessage.

peekMessage

public ServiceBusReceivedMessage peekMessage(long sequenceNumber)

Ab der angegebenen Sequenznummer liest neben der aktiven Nachricht, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

Parameters:

sequenceNumber - Die Sequenznummer, von der die Nachricht gelesen werden soll.

Returns:

Ein eingesehenes ServiceBusReceivedMessage.

peekMessages

public IterableStream peekMessages(int maxMessages)

Liest den nächsten Batch mit aktiven Nachrichten, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

Parameters:

maxMessages - Die maximale Anzahl von Nachrichten, die eingesehen werden sollen.

Returns:

Eine IterableStream<T> von ServiceBusReceivedMessage , die eingesehen wird.

peekMessages

public IterableStream peekMessages(int maxMessages, long sequenceNumber)

Liest ab der angegebenen Sequenznummer den nächsten Batch aktiver Nachrichten, ohne den Status des Empfängers oder der Nachrichtenquelle zu ändern.

Parameters:

maxMessages - Die Anzahl der Meldungen.
sequenceNumber - Die Sequenznummer, ab der mit dem Lesen von Nachrichten begonnen werden soll.

Returns:

receiveDeferredMessage

public ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Empfängt eine verzögerte ServiceBusReceivedMessage. Verzögerte Nachrichten können nur mithilfe der Sequenznummer empfangen werden.

Parameters:

sequenceNumber - Die getSequenceNumber() der Meldung.

Returns:

Eine verzögerte Nachricht mit dem übereinstimmenden sequenceNumber.

receiveDeferredMessageBatch

public IterableStream receiveDeferredMessageBatch(Iterable sequenceNumbers)

Empfängt einen Batch mit verzögertem ServiceBusReceivedMessage. Verzögerte Nachrichten können nur mithilfe der Sequenznummer empfangen werden.

Parameters:

sequenceNumbers - Die Sequenznummern der verzögerten Nachrichten.

Returns:

receiveMessages

public IterableStream receiveMessages(int maxMessages)

Empfängt einen iterierbaren Stream von von ServiceBusReceivedMessage der Service Bus-Entität. Der Empfangsvorgang wartet standardmäßig 1 Minute auf den Empfang einer Nachricht, bevor ein Timeout auftritt. Sie können es überschreiben, indem Sie verwenden receiveMessages(int maxMessages, Duration maxWaitTime).

Der Client verwendet einen AMQP-Link darunter, um die Nachrichten zu empfangen. Der Client wechselt transparent zu einem neuen AMQP-Link, wenn für den aktuellen ein wiederholbarer Fehler auftritt. Wenn auf dem Client ein nicht wiederholbarer Fehler auftritt oder die Wiederholungsversuche erschöpft sind, löst die Iteration (z. B. forEach) für den IterableStream<T> durch die weiteren Aufrufe der receiveMessages-API zurückgegebenen den Fehler an die Anwendung aus. Sobald die Anwendung diesen Fehler empfängt, sollte die Anwendung den Client zurücksetzen, d. h. den aktuellen ServiceBusReceiverClient schließen und einen neuen Client erstellen, um weiterhin Nachrichten zu empfangen.

Hinweis: Einige Beispiele für nicht wiederholbare Fehler sind: Die Anwendung versucht, eine Verbindung mit einer Warteschlange herzustellen, die nicht vorhanden ist, das Löschen oder Deaktivieren der Warteschlange in der Mitte des Empfangs, der Benutzer initiiert explizit geo-DR. Dies sind bestimmte Ereignisse, bei denen Service Bus dem Client mitgeteilt, dass ein nicht wiederholbarer Fehler aufgetreten ist.

Parameters:

maxMessages - Die maximale Anzahl von Nachrichten, die empfangen werden sollen.

Returns:

Eine IterableStream<T> von den meisten maxMessages Nachrichten der Service Bus-Entität.

receiveMessages

public IterableStream receiveMessages(int maxMessages, Duration maxWaitTime)

Empfängt einen iterierbaren Stream von von ServiceBusReceivedMessage der Service Bus-Entität. Der Standard-Empfangsmodus ist PEEK_LOCK es, es sei denn, er wird während der Erstellung von ServiceBusReceiverClient mit ServiceBusReceiverClientBuilder#receiveMode(ServiceBusReceiveMode)geändert.

Der Client verwendet einen AMQP-Link darunter, um die Nachrichten zu empfangen. Der Client wechselt transparent zu einem neuen AMQP-Link, wenn für den aktuellen ein wiederholbarer Fehler auftritt. Wenn auf dem Client ein nicht wiederholbarer Fehler auftritt oder die Wiederholungsversuche erschöpft sind, löst die Iteration (z. B. forEach) für den IterableStream<T> durch die weiteren Aufrufe der receiveMessages-API zurückgegebenen den Fehler an die Anwendung aus. Sobald die Anwendung diesen Fehler empfängt, sollte die Anwendung den Client zurücksetzen, d. h. den aktuellen ServiceBusReceiverClient schließen und einen neuen Client erstellen, um weiterhin Nachrichten zu empfangen.

Hinweis: Einige Beispiele für nicht wiederholbare Fehler sind: Die Anwendung versucht, eine Verbindung mit einer Warteschlange herzustellen, die nicht vorhanden ist, das Löschen oder Deaktivieren der Warteschlange in der Mitte des Empfangs, der Benutzer initiiert explizit geo-DR. Dies sind bestimmte Ereignisse, bei denen Service Bus dem Client mitgeteilt, dass ein nicht wiederholbarer Fehler aufgetreten ist.

Parameters:

maxMessages - Die maximale Anzahl von Nachrichten, die empfangen werden sollen.
maxWaitTime - Die Zeit, zu der der Client auf den Empfang einer Nachricht wartet, bevor ein Timeout aufgetreten ist.

Returns:

Eine IterableStream<T> von den meisten maxMessages Nachrichten der Service Bus-Entität.

renewMessageLock

public OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Erneuert die Sperre für die angegebene Nachricht. Die Sperre wird basierend auf der für die Entität angegebenen Einstellung verlängert. Wenn eine Nachricht im PEEK_LOCK Modus empfangen wird, wird die Nachricht auf dem Server für diesen Empfänger instance für einen Zeitraum gesperrt, der während der Erstellung der Warteschlange angegeben wurde (LockDuration). Wenn die Verarbeitung der Nachricht länger als diese Dauer erfordert, muss die Sperre verlängert werden. Bei jeder Verlängerung wird die Sperre auf den LockDuration-Wert der Entität zurückgesetzt.

Parameters:

message - Der ServiceBusReceivedMessage , um die Sperrverlängerung durchzuführen.

Returns:

Die neue Ablaufzeit für die Nachricht.

renewMessageLock

public void renewMessageLock(ServiceBusReceivedMessage message, Duration maxLockRenewalDuration, Consumer onError)

Startet die automatische Sperrverlängerung für eine Nachricht mit der angegebenen Sperre.

Parameters:

message - Die ServiceBusReceivedMessage zum Ausführen der automatischen Sperrverlängerung.
maxLockRenewalDuration - Maximale Dauer für die weitere Verlängerung des Sperrtokens.
onError - Eine Funktion, die aufgerufen werden soll, wenn während der Verlängerung der Sperre ein Fehler auftritt.

renewSessionLock

public OffsetDateTime renewSessionLock()

Legt den Zustand der Sitzung fest, wenn dieser Empfänger ein Sitzungsempfänger ist.

Returns:

Die nächste Ablaufzeit für die Sitzungssperre.

renewSessionLock

public void renewSessionLock(Duration maxLockRenewalDuration, Consumer onError)

Startet die Verlängerung der automatischen Sperre für die Sitzung, für die dieser Empfänger arbeitet.

Parameters:

maxLockRenewalDuration - Maximale Dauer, um die Sitzung weiterhin zu verlängern.
onError - Eine Funktion, die aufgerufen werden soll, wenn während der Verlängerung der Sperre ein Fehler auftritt.

rollbackTransaction

public void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Rollbacks für die angegebene Transaktion und alle ihr zugeordneten Vorgänge.

Erstellen und Verwenden einer Transaktion

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:

transactionContext - Die Transaktion, die rollbacken soll.

setSessionState

public void setSessionState(byte[] sessionState)

Legt den Zustand der Sitzung fest, wenn es sich bei diesem Empfänger um einen Sitzungsempfänger handelt.

Parameters:

sessionState - Zustand, der für die Sitzung festgelegt werden soll.

Gilt für: