Freigeben über


ServiceBusSessionReceiverClient Klasse

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

Implementiert

public final class ServiceBusSessionReceiverClient
implements AutoCloseable

Dieser synchrone Sitzungsempfängerclient wird verwendet, um Sitzungssperren aus einer Warteschlange oder einem Thema abzurufen und Instanzen zu erstellen ServiceBusReceiverClient , die an die gesperrten Sitzungen gebunden sind. Sitzungen können als FIFO-Verarbeitung (First In First Out) von Nachrichten verwendet werden. Warteschlangen und Themen/Abonnements unterstützen Service Bus-Sitzungen, müssen jedoch zum Zeitpunkt der Entitätserstellung aktiviert werden.

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 empfohlen, die verwaltete Identität für die Authentifizierung in Produktionsumgebungen zu verwenden. Weitere Informationen zu verschiedenen Authentifizierungsmethoden und den entsprechenden Anmeldeinformationstypen finden Sie in der Azure Identity-Dokumentation.

Beispiel: Empfangen von Nachrichten aus einer bestimmten Sitzung

Verwenden Sie acceptSession(String sessionId) , um die Sperre einer Sitzung abzurufen, wenn Sie die Sitzungs-ID kennen. PEEK_LOCK Wird dringend empfohlen, damit Benutzer die Kontrolle über die Nachrichtenabwicklung haben.

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

Beispiel: Empfangen von Nachrichten aus der ersten verfügbaren Sitzung

Verwenden Sie acceptNextSession() , um die Sperre der nächsten verfügbaren Sitzung ohne Angabe der Sitzungs-ID abzurufen. PEEK_LOCK Wird dringend empfohlen, damit Benutzer die Kontrolle über die Nachrichtenabwicklung haben.

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

Methodenzusammenfassung

Modifizierer und Typ Methode und Beschreibung
ServiceBusReceiverClient acceptNextSession()

Ruft eine Sitzungssperre für die nächste verfügbare Sitzung ab und erstellt eine ServiceBusReceiverClient , um Nachrichten von der Sitzung zu empfangen.

ServiceBusReceiverClient acceptSession(String sessionId)

Ruft eine Sitzungssperre für sessionId ab und erstellt eine ServiceBusReceiverClient , um Nachrichten von der Sitzung zu empfangen.

void close()

Geerbte Methoden von java.lang.Object

Details zur Methode

acceptNextSession

public ServiceBusReceiverClient acceptNextSession()

Ruft eine Sitzungssperre für die nächste verfügbare Sitzung ab und erstellt eine ServiceBusReceiverClient , um Nachrichten von der Sitzung zu empfangen. Es wird gewartet, bis eine Sitzung verfügbar ist, wenn niemand sofort verfügbar ist.

Returns:

Eine ServiceBusReceiverClient , die an die verfügbare Sitzung gebunden ist.

acceptSession

public ServiceBusReceiverClient acceptSession(String sessionId)

Ruft eine Sitzungssperre für sessionId ab und erstellt eine ServiceBusReceiverClient , um Nachrichten von der Sitzung zu empfangen. Wenn die Sitzung bereits von einem anderen Client gesperrt ist, wird sofort ein AmqpException ausgelöst.

Parameters:

sessionId - Die Sitzungs-ID.

Returns:

Eine ServiceBusReceiverClient , die an die angegebene Sitzung gebunden ist.

close

public void close()

Gilt für: