Compartir a través de


ServiceBusSessionReceiverClient Clase

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

Implementaciones

public final class ServiceBusSessionReceiverClient
implements AutoCloseable

Este cliente de receptor de sesión sincrónico se usa para adquirir bloqueos de sesión de una cola o tema y crear ServiceBusReceiverClient instancias vinculadas a las sesiones bloqueadas. Las sesiones se pueden usar como un primer procesamiento de mensajes en primer lugar (FIFO). Las colas y temas o suscripciones admiten sesiones de Service Bus; sin embargo, debe habilitarse en el momento de la creación de la entidad.

Los ejemplos que se muestran en este documento usan un objeto de credencial denominado DefaultAzureCredential para la autenticación, que es adecuado para la mayoría de los escenarios, incluidos los entornos de desarrollo y producción locales. Además, se recomienda usar la identidad administrada para la autenticación en entornos de producción. Puede encontrar más información sobre las distintas formas de autenticación y sus tipos de credenciales correspondientes en la documentación de Azure Identity.

Ejemplo: Recepción de mensajes de una sesión específica

Use acceptSession(String sessionId) para adquirir el bloqueo de una sesión si conoce el identificador de sesión. PEEK_LOCK Se recomienda encarecidamente para que los usuarios tengan control sobre la liquidación de mensajes.

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

Ejemplo: Recepción de mensajes de la primera sesión disponible

Use acceptNextSession() para adquirir el bloqueo de la siguiente sesión disponible sin especificar el identificador de sesión. PEEK_LOCK Se recomienda encarecidamente que los usuarios tengan control sobre la liquidación de mensajes.

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

Resumen del método

Modificador y tipo Método y descripción
ServiceBusReceiverClient acceptNextSession()

Adquiere un bloqueo de sesión para la siguiente sesión disponible y crea un para ServiceBusReceiverClient recibir mensajes de la sesión.

ServiceBusReceiverClient acceptSession(String sessionId)

Adquiere un bloqueo de sesión para y crea un ServiceBusReceiverClient para sessionId recibir mensajes de la sesión.

void close()

Métodos heredados de java.lang.Object

Detalles del método

acceptNextSession

public ServiceBusReceiverClient acceptNextSession()

Adquiere un bloqueo de sesión para la siguiente sesión disponible y crea un para ServiceBusReceiverClient recibir mensajes de la sesión. Esperará hasta que una sesión esté disponible si nadie está disponible inmediatamente.

Returns:

que ServiceBusReceiverClient está vinculado a la sesión disponible.

acceptSession

public ServiceBusReceiverClient acceptSession(String sessionId)

Adquiere un bloqueo de sesión para y crea un ServiceBusReceiverClient para sessionId recibir mensajes de la sesión. Si la sesión ya está bloqueada por otro cliente, se inicia inmediatamente AmqpException .

Parameters:

sessionId - Identificador de sesión.

Returns:

que ServiceBusReceiverClient está vinculado a la sesión especificada.

close

public void close()

Se aplica a