ServiceBusReceiverClient Clase
- java.
lang. Object - com.
azure. messaging. servicebus. ServiceBusReceiverClient
- com.
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 . |
Service |
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 el |
byte[] |
getSessionState()
Obtiene el estado de la sesión si este receptor es un receptor de sesión. |
Service |
peekMessage()
Lee el siguiente mensaje activo sin cambiar el estado del receptor o el origen del mensaje. |
Service |
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. |
Iterable |
peekMessages(int maxMessages)
Lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje. |
Iterable |
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. |
Service |
receiveDeferredMessage(long sequenceNumber)
Recibe un aplazado ServiceBusReceivedMessage. |
Iterable |
receiveDeferredMessageBatch(Iterable<Long> sequenceNumbers)
Recibe un lote de aplazado ServiceBusReceivedMessage. |
Iterable |
receiveMessages(int maxMessages)
Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus. |
Iterable |
receiveMessages(int maxMessages, Duration maxWaitTime)
Recibe un flujo iterable de ServiceBusReceivedMessage de la entidad de Service Bus. |
Offset |
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. |
Offset |
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:
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:
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:
complete
public void complete(ServiceBusReceivedMessage message)
Completa un ServiceBusReceivedMessageobjeto . Esto eliminará el mensaje del servicio.
Parameters:
complete
public void complete(ServiceBusReceivedMessage message, CompleteOptions options)
Completa un ServiceBusReceivedMessageobjeto . Esto eliminará el mensaje del servicio.
Parameters:
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:
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:
defer
public void defer(ServiceBusReceivedMessage message)
Aplaza un ServiceBusReceivedMessageobjeto . Esto moverá el mensaje a la subconsulta diferida.
Parameters:
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:
getEntityPath
public String getEntityPath()
Obtiene el recurso de Service Bus con el que interactúa este cliente.
Returns:
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:
getIdentifier
public String getIdentifier()
Obtiene el identificador de la instancia de ServiceBusReceiverClient.
Returns:
getSessionId
public String getSessionId()
Obtiene el SessionId de la sesión si este receptor es un receptor de sesión.
Returns:
getSessionState
public byte[] getSessionState()
Obtiene el estado de la sesión si este receptor es un receptor de sesión.
Returns:
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:
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:
Returns:
peekMessages
public IterableStream
Lee el siguiente lote de mensajes activos sin cambiar el estado del receptor o el origen del mensaje.
Parameters:
Returns:
peekMessages
public IterableStream
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:
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:
Returns:
sequenceNumber
.receiveDeferredMessageBatch
public IterableStream
Recibe un lote de aplazado ServiceBusReceivedMessage. Los mensajes diferidos solo se pueden recibir mediante el número de secuencia.
Parameters:
Returns:
receiveMessages
public IterableStream
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:
Returns:
maxMessages
de la entidad de Service Bus.receiveMessages
public IterableStream
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:
Returns:
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:
Returns:
renewMessageLock
public void renewMessageLock(ServiceBusReceivedMessage message, Duration maxLockRenewalDuration, Consumer
Inicia la renovación de bloqueo automático para un mensaje con el bloqueo especificado.
Parameters:
renewSessionLock
public OffsetDateTime renewSessionLock()
Establece el estado de la sesión si este receptor es un receptor de sesión.
Returns:
renewSessionLock
public void renewSessionLock(Duration maxLockRenewalDuration, Consumer
Inicia la renovación de bloqueo automático para la sesión para la que funciona este receptor.
Parameters:
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:
setSessionState
public void setSessionState(byte[] sessionState)
Establece el estado de la sesión si este receptor es un receptor de sesión.
Parameters:
Se aplica a
Azure SDK for Java