Compartir a través de


ServiceBusReceiverClient Clase

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

Implementaciones

public final class ServiceBusReceiverClient
implements AutoCloseable

Receptor sincrónico responsable de recibir ServiceBusReceivedMessage de una cola o tema o suscripción en Azure Service Bus.

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 Identidad de Azure".

Ejemplo: Crear un receptor y recibir mensajes

En el ejemplo de código siguiente se muestra la creación y el uso del cliente ServiceBusReceiverClient sincrónico para recibir mensajes de una suscripción de Service Bus. La operación de recepción devuelve cuando han transcurrido 10 mensajes o 30 segundos. De forma predeterminada, los mensajes se reciben mediante PEEK_LOCK y los clientes deben liquidar sus mensajes mediante uno de los métodos de liquidación en el cliente receptor. " Operaciones de liquidación de recepción" proporciona información adicional sobre la liquidación de mensajes.

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

Resumen del método

Modificador y tipo Método y descripción
void abandon(ServiceBusReceivedMessage message)

Abandona un ServiceBusReceivedMessageobjeto .

void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

ServiceBusReceivedMessage Abandona y actualiza las propiedades del mensaje.

void close()

Elimina el consumidor cerrando los vínculos subyacentes al servicio.

void commitTransaction(ServiceBusTransactionContext transactionContext)

Confirma la transacción y todas las operaciones asociadas a ella.

void complete(ServiceBusReceivedMessage message)

Completa un ServiceBusReceivedMessageobjeto .

void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Completa un ServiceBusReceivedMessageobjeto .

ServiceBusTransactionContext createTransaction()

Inicia una nueva transacción en Service Bus.

void deadLetter(ServiceBusReceivedMessage message)

Mueve un ServiceBusReceivedMessage objeto a la subcola de mensajes fallidos.

void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Mueve un ServiceBusReceivedMessage objeto a la sub cola de mensajes fallidos con las propiedades de motivo de mensajes fallidos, descripción del error o modificadas.

void defer(ServiceBusReceivedMessage message)

Aplaza un ServiceBusReceivedMessageobjeto .

void defer(ServiceBusReceivedMessage message, DeferOptions options)

Aplaza un ServiceBusReceivedMessage mediante su token de bloqueo con la propiedad de mensaje modificada.

String getEntityPath()

Obtiene el recurso de Service Bus con el que interactúa este cliente.

String getFullyQualifiedNamespace()

Obtiene el espacio de nombres completo de Service Bus al que está asociada la conexión.

String getIdentifier()

Obtiene el identificador de la instancia de ServiceBusReceiverClient.

String getSessionId()

Obtiene elidentificador de sesión de la sesión si este receptor es un receptor de sesión.

byte[] getSessionState()

Obtiene el estado de la sesión si este receptor es un receptor de sesión.

ServiceBusReceivedMessage peekMessage()

Lee el siguiente mensaje activo sin cambiar el estado del receptor o el origen del mensaje.

ServiceBusReceivedMessage peekMessage(long sequenceNumber)

A partir del número de secuencia especificado, lee el siguiente mensaje activo sin cambiar el estado del receptor o el origen del mensaje.

IterableStream<ServiceBusReceivedMessage> peekMessages(int maxMessages)

Lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje.

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

A partir del número de secuencia especificado, lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje.

ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Recibe un aplazado ServiceBusReceivedMessage.

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

Recibe un lote de aplazado ServiceBusReceivedMessage.

IterableStream<ServiceBusReceivedMessage> receiveMessages(int maxMessages)

Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus.

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

Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus.

OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Renueva el bloqueo en el mensaje especificado.

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

Inicia la renovación de bloqueo automático para un mensaje con el bloqueo especificado.

OffsetDateTime renewSessionLock()

Establece el estado de la sesión si este receptor es un receptor de sesión.

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

Inicia la renovación de bloqueo automático para la sesión para la que funciona este receptor.

void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Revierte la transacción dada y todas las operaciones asociadas a ella.

void setSessionState(byte[] sessionState)

Establece el estado de la sesión si este receptor es un receptor de sesión.

Métodos heredados de java.lang.Object

Detalles del método

abandon

public void abandon(ServiceBusReceivedMessage message)

Abandona un ServiceBusReceivedMessageobjeto . Esto hará que el mensaje esté disponible de nuevo para su procesamiento. Abandonar un mensaje aumentará el número de entregas en el mensaje.

Parameters:

message - ServiceBusReceivedMessage que se va a realizar esta operación.

abandon

public void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

ServiceBusReceivedMessage Abandona y actualiza las propiedades del mensaje. Esto hará que el mensaje esté disponible de nuevo para su procesamiento. Abandonar un mensaje aumentará el número de entregas en el mensaje.

Parameters:

message - ServiceBusReceivedMessage que se va a realizar esta operación.
options - Opciones que se van a establecer al abandonar el mensaje.

close

public void close()

Elimina el consumidor cerrando los vínculos subyacentes al servicio.

commitTransaction

public void commitTransaction(ServiceBusTransactionContext transactionContext)

Confirma la transacción y todas las operaciones asociadas a ella.

Creación y uso de una transacción

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 - Transacción que se va a confirmar.

complete

public void complete(ServiceBusReceivedMessage message)

Completa un ServiceBusReceivedMessageobjeto . Esto eliminará el mensaje del servicio.

Parameters:

message - ServiceBusReceivedMessage que se va a realizar esta operación.

complete

public void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Completa un ServiceBusReceivedMessageobjeto . Esto eliminará el mensaje del servicio.

Parameters:

message - ServiceBusReceivedMessage que se va a realizar esta operación.
options - Opciones usadas para completar el mensaje.

createTransaction

public ServiceBusTransactionContext createTransaction()

Inicia una nueva transacción en Service Bus. ServiceBusTransactionContext Debe pasarse a todas las operaciones que deben estar en esta transacción.

Ejemplo: Creación y uso de una transacción

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)

Mueve un ServiceBusReceivedMessage objeto a la subcola de mensajes fallidos.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar esta operación.

deadLetter

public void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Mueve un ServiceBusReceivedMessage objeto a la sub cola de mensajes fallidos con las propiedades de motivo de mensajes fallidos, descripción del error o modificadas.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar esta operación.
options - Opciones usadas para enviar mensajes fallidos al mensaje.

defer

public void defer(ServiceBusReceivedMessage message)

Aplaza un ServiceBusReceivedMessageobjeto . Esto moverá el mensaje a la subconsulta diferida.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar esta operación.

defer

public void defer(ServiceBusReceivedMessage message, DeferOptions options)

Aplaza un ServiceBusReceivedMessage mediante su token de bloqueo con la propiedad de mensaje modificada. Esto moverá el mensaje a la subcola diferida.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar esta operación.
options - Opciones usadas para aplazar el mensaje.

getEntityPath

public String getEntityPath()

Obtiene el recurso de Service Bus con el que interactúa este cliente.

Returns:

El recurso de Service Bus con el que interactúa este cliente.

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

Obtiene el espacio de nombres completo de Service Bus al que está asociada la conexión. Es probable que sea similar a {yournamespace}.servicebus.windows.net.

Returns:

Espacio de nombres completo de Service Bus al que está asociada la conexión.

getIdentifier

public String getIdentifier()

Obtiene el identificador de la instancia de ServiceBusReceiverClient.

Returns:

Identificador que puede identificar la instancia de ServiceBusReceiverClient.

getSessionId

public String getSessionId()

Obtiene el SessionId de la sesión si este receptor es un receptor de sesión.

Returns:

SessionId o null si no es un receptor de sesión.

getSessionState

public byte[] getSessionState()

Obtiene el estado de la sesión si este receptor es un receptor de sesión.

Returns:

El estado de sesión o null si no hay ningún estado establecido para la sesión.

peekMessage

public ServiceBusReceivedMessage peekMessage()

Lee el siguiente mensaje activo sin cambiar el estado del receptor o el origen del mensaje. La primera llamada para peekMessage() capturar el primer mensaje activo para este receptor. Cada llamada posterior captura el mensaje subsiguiente en la entidad .

Returns:

Un objeto que se ha inspeccionado ServiceBusReceivedMessage.

peekMessage

public ServiceBusReceivedMessage peekMessage(long sequenceNumber)

A partir del número de secuencia especificado, lee el siguiente mensaje activo sin cambiar el estado del receptor o el origen del mensaje.

Parameters:

sequenceNumber - Número de secuencia desde donde se va a leer el mensaje.

Returns:

Un objeto que se ha inspeccionado ServiceBusReceivedMessage.

peekMessages

public IterableStream peekMessages(int maxMessages)

Lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje.

Parameters:

maxMessages - Número máximo de mensajes que se van a ver.

Returns:

peekMessages

public IterableStream peekMessages(int maxMessages, long sequenceNumber)

A partir del número de secuencia especificado, lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje.

Parameters:

maxMessages - El número de mensajes.
sequenceNumber - Número de secuencia desde donde empezar a leer los mensajes.

Returns:

receiveDeferredMessage

public ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Recibe un aplazado ServiceBusReceivedMessage. Los mensajes diferidos solo se pueden recibir mediante el número de secuencia.

Parameters:

sequenceNumber - getSequenceNumber() del mensaje.

Returns:

Mensaje diferido con el objeto coincidente sequenceNumber.

receiveDeferredMessageBatch

public IterableStream receiveDeferredMessageBatch(Iterable sequenceNumbers)

Recibe un lote de aplazado ServiceBusReceivedMessage. Los mensajes diferidos solo se pueden recibir mediante el número de secuencia.

Parameters:

sequenceNumbers - Los números de secuencia de los mensajes diferidos.

Returns:

receiveMessages

public IterableStream receiveMessages(int maxMessages)

Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus. La operación de recepción esperará un minuto predeterminado para recibir un mensaje antes de que se agote el tiempo de espera. Puede invalidarlo mediante receiveMessages(int maxMessages, Duration maxWaitTime).

El cliente utiliza un vínculo AMQP debajo para recibir los mensajes; el cliente pasará de forma transparente a un nuevo vínculo amQP si el actual encuentra un error reintenible. Cuando el cliente experimenta un error que no se puede reintentar o agota los reintentos, la iteración (por ejemplo, forEach) en el IterableStream<T> devuelto por las invocaciones adicionales de receiveMessages API producirá el error en la aplicación. Una vez que la aplicación recibe este error, la aplicación debe restablecer el cliente, es decir, cerrar el actual ServiceBusReceiverClient y crear un nuevo cliente para continuar recibiendo mensajes.

Nota: Algunos ejemplos de errores no reintenibles son: la aplicación que intenta conectarse a una cola que no existe, elimina o deshabilita la cola en medio de la recepción, el usuario inicia explícitamente la recuperación ante desastres geográfica. Estos son ciertos eventos en los que Service Bus se comunica con el cliente de que se produjo un error no reintenible.

Parameters:

maxMessages - Número máximo de mensajes que se van a recibir.

Returns:

Un IterableStream<T> de los mensajes como máximo maxMessages de la entidad de Service Bus.

receiveMessages

public IterableStream receiveMessages(int maxMessages, Duration maxWaitTime)

Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus. El modo de recepción predeterminado es PEEK_LOCK a menos que se cambie durante la creación del uso ServiceBusReceiverClientBuilder#receiveMode(ServiceBusReceiveMode)de ServiceBusReceiverClient .

El cliente utiliza un vínculo AMQP debajo para recibir los mensajes; el cliente pasará de forma transparente a un nuevo vínculo amQP si el actual encuentra un error reintenible. Cuando el cliente experimenta un error que no se puede reintentar o agota los reintentos, la iteración (por ejemplo, forEach) en el IterableStream<T> devuelto por las invocaciones adicionales de receiveMessages API producirá el error en la aplicación. Una vez que la aplicación recibe este error, la aplicación debe restablecer el cliente, es decir, cerrar el actual ServiceBusReceiverClient y crear un nuevo cliente para continuar recibiendo mensajes.

Nota: Algunos ejemplos de errores no reintenibles son: la aplicación que intenta conectarse a una cola que no existe, elimina o deshabilita la cola en medio de la recepción, el usuario inicia explícitamente la recuperación ante desastres geográfica. Estos son ciertos eventos en los que Service Bus se comunica con el cliente de que se produjo un error no reintenible.

Parameters:

maxMessages - Número máximo de mensajes que se van a recibir.
maxWaitTime - El tiempo que el cliente espera a recibir un mensaje antes de que se agote el tiempo de espera.

Returns:

Un IterableStream<T> de los mensajes como máximo maxMessages de la entidad de Service Bus.

renewMessageLock

public OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Renueva el bloqueo en el mensaje especificado. El bloqueo se renovará en función de la configuración especificada en la entidad. Cuando se recibe un mensaje en PEEK_LOCK modo , el mensaje se bloquea en el servidor para esta instancia de receptor durante una duración especificada durante la creación de la cola (LockDuration). Si el procesamiento del mensaje requiere más tiempo que esta duración, el bloqueo debe renovarse. Para cada renovación, el bloqueo se restablece al valor LockDuration de la entidad.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar la renovación del bloqueo.

Returns:

Nueva hora de expiración del mensaje.

renewMessageLock

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

Inicia la renovación de bloqueo automático para un mensaje con el bloqueo especificado.

Parameters:

message - que ServiceBusReceivedMessage se va a realizar la renovación de bloqueo automático.
maxLockRenewalDuration - Duración máxima para mantener la renovación del token de bloqueo.
onError - Función a la que se llamará cuando se produce un error durante la renovación del bloqueo.

renewSessionLock

public OffsetDateTime renewSessionLock()

Establece el estado de la sesión si este receptor es un receptor de sesión.

Returns:

La próxima hora de expiración para el bloqueo de sesión.

renewSessionLock

public void renewSessionLock(Duration maxLockRenewalDuration, Consumer onError)

Inicia la renovación de bloqueo automático para la sesión para la que funciona este receptor.

Parameters:

maxLockRenewalDuration - Duración máxima para mantener la renovación de la sesión.
onError - Función a la que se llamará cuando se produce un error durante la renovación del bloqueo.

rollbackTransaction

public void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Revierte la transacción dada y todas las operaciones asociadas a ella.

Creación y uso de una transacción

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 - Transacción que se va a revertir.

setSessionState

public void setSessionState(byte[] sessionState)

Establece el estado de la sesión si este receptor es un receptor de sesión.

Parameters:

sessionState - Estado que se va a establecer en la sesión.

Se aplica a