Partilhar via


ServiceBusReceiverClient Classe

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

Implementações

public final class ServiceBusReceiverClient
implements AutoCloseable

Um receptor síncrono responsável por receber ServiceBusReceivedMessage de uma fila ou tópico/assinatura em Barramento de Serviço do Azure.

Os exemplos mostrados neste documento usam um objeto de credencial chamado DefaultAzureCredential para autenticação, que é apropriado para a maioria dos cenários, incluindo ambientes locais de desenvolvimento e produção. Além disso, é recomendável usar a identidade gerenciada para autenticação em ambientes de produção. Você pode encontrar mais informações sobre diferentes maneiras de autenticação e seus tipos de credenciais correspondentes na documentação da Identidade do Azure".

Exemplo: criar um receptor e receber mensagens

O exemplo de código a seguir demonstra a criação e o uso do cliente ServiceBusReceiverClient síncrono para receber mensagens de uma assinatura do Barramento de Serviço. A operação de recebimento retorna quando 10 mensagens são recebidas ou 30 segundos são decorridos. Por padrão, as mensagens são recebidas usando PEEK_LOCK e os clientes devem liquidar suas mensagens usando um dos métodos de liquidação no cliente receptor. " "Liquidar operações de recebimento" fornece informações adicionais sobre a liquidação de mensagens.

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

Resumo do método

Modificador e tipo Método e descrição
void abandon(ServiceBusReceivedMessage message)

Abandona um ServiceBusReceivedMessage.

void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

Abandona um ServiceBusReceivedMessage e atualiza as propriedades da mensagem.

void close()

Descarta o consumidor fechando os links subjacentes para o serviço.

void commitTransaction(ServiceBusTransactionContext transactionContext)

Confirma a transação e todas as operações associadas a ela.

void complete(ServiceBusReceivedMessage message)

Conclui um ServiceBusReceivedMessage.

void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Conclui um ServiceBusReceivedMessage.

ServiceBusTransactionContext createTransaction()

Inicia uma nova transação no Barramento de Serviço.

void deadLetter(ServiceBusReceivedMessage message)

Move um ServiceBusReceivedMessage para a sub-fila de mensagens mortas.

void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Move um ServiceBusReceivedMessage para a sub-fila de mensagens mortas com motivo de carta morta, descrição do erro e/ou propriedades modificadas.

void defer(ServiceBusReceivedMessage message)

Adia um ServiceBusReceivedMessage.

void defer(ServiceBusReceivedMessage message, DeferOptions options)

Adia um ServiceBusReceivedMessage usando seu token de bloqueio com a propriedade de mensagem modificada.

String getEntityPath()

Obtém o recurso do Barramento de Serviço com o qual esse cliente interage.

String getFullyQualifiedNamespace()

Obtém o namespace do Barramento de Serviço totalmente qualificado ao qual a conexão está associada.

String getIdentifier()

Obtém o identificador da instância de ServiceBusReceiverClient.

String getSessionId()

Obtém a ID de Sessãoda sessão se esse receptor for um receptor de sessão.

byte[] getSessionState()

Obtém o estado da sessão se esse receptor for um receptor de sessão.

ServiceBusReceivedMessage peekMessage()

Lê a próxima mensagem ativa sem alterar o estado do receptor ou a origem da mensagem.

ServiceBusReceivedMessage peekMessage(long sequenceNumber)

A partir do número de sequência especificado, lê em seguida a mensagem ativa sem alterar o estado do receptor ou da origem da mensagem.

IterableStream<ServiceBusReceivedMessage> peekMessages(int maxMessages)

Lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem.

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

A partir do número de sequência especificado, lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem.

ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Recebe um adiado ServiceBusReceivedMessage.

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

Recebe um lote de adiado ServiceBusReceivedMessage.

IterableStream<ServiceBusReceivedMessage> receiveMessages(int maxMessages)

Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço.

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

Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço.

OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Renova o bloqueio na mensagem especificada.

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

Inicia a renovação de bloqueio automático para uma mensagem com o bloqueio fornecido.

OffsetDateTime renewSessionLock()

Define o estado da sessão se esse receptor for um receptor de sessão.

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

Inicia a renovação de bloqueio automático para a sessão para a qual esse receptor funciona.

void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Reverte a transação fornecida e todas as operações associadas a ela.

void setSessionState(byte[] sessionState)

Define o estado da sessão se esse receptor for um receptor de sessão.

Métodos herdados de java.lang.Object

Detalhes do método

abandon

public void abandon(ServiceBusReceivedMessage message)

Abandona um ServiceBusReceivedMessage. Isso disponibilizará a mensagem novamente para processamento. Abandonar uma mensagem aumentará a contagem de entrega na mensagem.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.

abandon

public void abandon(ServiceBusReceivedMessage message, AbandonOptions options)

Abandona um ServiceBusReceivedMessage e atualiza as propriedades da mensagem. Isso disponibilizará a mensagem novamente para processamento. Abandonar uma mensagem aumentará a contagem de entrega na mensagem.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.
options - As opções a serem definidas ao abandonar a mensagem.

close

public void close()

Descarta o consumidor fechando os links subjacentes para o serviço.

commitTransaction

public void commitTransaction(ServiceBusTransactionContext transactionContext)

Confirma a transação e todas as operações associadas a ela.

Criando e usando uma transação

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 - A transação a ser confirmada.

complete

public void complete(ServiceBusReceivedMessage message)

Conclui um ServiceBusReceivedMessage. Isso excluirá a mensagem do serviço.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.

complete

public void complete(ServiceBusReceivedMessage message, CompleteOptions options)

Conclui um ServiceBusReceivedMessage. Isso excluirá a mensagem do serviço.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.
options - Opções usadas para concluir a mensagem.

createTransaction

public ServiceBusTransactionContext createTransaction()

Inicia uma nova transação no Barramento de Serviço. O ServiceBusTransactionContext deve ser passado para todas as operações que precisam estar nessa transação.

Exemplo: criando e usando uma transação

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)

Move um ServiceBusReceivedMessage para a sub-fila de mensagens mortas.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.

deadLetter

public void deadLetter(ServiceBusReceivedMessage message, DeadLetterOptions options)

Move um ServiceBusReceivedMessage para a sub-fila de mensagens mortas com motivo de carta morta, descrição do erro e/ou propriedades modificadas.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.
options - Opções usadas para enviar a mensagem com mensagens mortas.

defer

public void defer(ServiceBusReceivedMessage message)

Adia um ServiceBusReceivedMessage. Isso moverá a mensagem para a subconsulta adiada.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.

defer

public void defer(ServiceBusReceivedMessage message, DeferOptions options)

Adia um ServiceBusReceivedMessage usando seu token de bloqueio com a propriedade de mensagem modificada. Isso moverá a mensagem para a sub-fila adiada.

Parameters:

message - O ServiceBusReceivedMessage para executar essa operação.
options - Opções usadas para adiar a mensagem.

getEntityPath

public String getEntityPath()

Obtém o recurso do Barramento de Serviço com o qual esse cliente interage.

Returns:

O recurso do Barramento de Serviço com o qual esse cliente interage.

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

Obtém o namespace do Barramento de Serviço totalmente qualificado ao qual a conexão está associada. Isso provavelmente é semelhante a {yournamespace}.servicebus.windows.net.

Returns:

O namespace do Barramento de Serviço totalmente qualificado ao qual a conexão está associada.

getIdentifier

public String getIdentifier()

Obtém o identificador da instância de ServiceBusReceiverClient.

Returns:

O identificador que pode identificar a instância do ServiceBusReceiverClient.

getSessionId

public String getSessionId()

Obtém a SessionId da sessão se esse receptor for um receptor de sessão.

Returns:

SessionId ou null se este não for um receptor de sessão.

getSessionState

public byte[] getSessionState()

Obtém o estado da sessão se esse receptor for um receptor de sessão.

Returns:

O estado da sessão ou nulo se não houver nenhum estado definido para a sessão.

peekMessage

public ServiceBusReceivedMessage peekMessage()

Lê a próxima mensagem ativa sem alterar o estado do receptor ou a origem da mensagem. A primeira chamada para peekMessage() buscar a primeira mensagem ativa para esse receptor. Cada chamada subsequente busca a mensagem subsequente na entidade.

Returns:

peekMessage

public ServiceBusReceivedMessage peekMessage(long sequenceNumber)

A partir do número de sequência especificado, lê em seguida a mensagem ativa sem alterar o estado do receptor ou da origem da mensagem.

Parameters:

sequenceNumber - O número de sequência de onde ler a mensagem.

Returns:

peekMessages

public IterableStream peekMessages(int maxMessages)

Lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem.

Parameters:

maxMessages - O número máximo de mensagens a serem espiadas.

Returns:

peekMessages

public IterableStream peekMessages(int maxMessages, long sequenceNumber)

A partir do número de sequência especificado, lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem.

Parameters:

maxMessages - O número de mensagens.
sequenceNumber - O número de sequência de onde começar a ler mensagens.

Returns:

receiveDeferredMessage

public ServiceBusReceivedMessage receiveDeferredMessage(long sequenceNumber)

Recebe um adiado ServiceBusReceivedMessage. Mensagens adiadas só podem ser recebidas usando o número de sequência.

Parameters:

sequenceNumber - O getSequenceNumber() da mensagem.

Returns:

Uma mensagem adiada com o correspondente sequenceNumber.

receiveDeferredMessageBatch

public IterableStream receiveDeferredMessageBatch(Iterable sequenceNumbers)

Recebe um lote de adiado ServiceBusReceivedMessage. Mensagens adiadas só podem ser recebidas usando o número de sequência.

Parameters:

sequenceNumbers - Os números de sequência das mensagens adiadas.

Returns:

receiveMessages

public IterableStream receiveMessages(int maxMessages)

Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço. A operação de recebimento aguardará um minuto padrão para receber uma mensagem antes de atingir o tempo limite. Você pode substituí-lo usando receiveMessages(int maxMessages, Duration maxWaitTime).

O cliente usa um link AMQP abaixo para receber as mensagens; o cliente fará a transição transparente para um novo link AMQP se o atual encontrar um erro retriável. Quando o cliente tiver um erro não retriável ou esgotar as tentativas, a iteração (por exemplo, forEach) no IterableStream<T> retornado pelas invocações adicionais da API receiveMessages gerará o erro para o aplicativo. Depois que o aplicativo receber esse erro, o aplicativo deverá redefinir o cliente, ou seja, fechar o atual ServiceBusReceiverClient e criar um novo cliente para continuar recebendo mensagens.

Observação: alguns exemplos de erros não retriáveis são : o aplicativo que tenta se conectar a uma fila que não existe, excluindo ou desabilitando a fila no meio do recebimento, o usuário iniciando explicitamente a Geo-DR. Esses são determinados eventos em que o Barramento de Serviço comunica ao cliente que ocorreu um erro não retriável.

Parameters:

maxMessages - O número máximo de mensagens a serem recebidas.

Returns:

Uma IterableStream<T> das no máximo maxMessages mensagens da entidade do Barramento de Serviço.

receiveMessages

public IterableStream receiveMessages(int maxMessages, Duration maxWaitTime)

Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço. O modo de recebimento padrão éPEEK_LOCK, a menos que seja alterado durante a criação do uso ServiceBusReceiverClientBuilder#receiveMode(ServiceBusReceiveMode)de ServiceBusReceiverClient .

O cliente usa um link AMQP abaixo para receber as mensagens; o cliente fará a transição transparente para um novo link AMQP se o atual encontrar um erro retriável. Quando o cliente tiver um erro não retriável ou esgotar as tentativas, a iteração (por exemplo, forEach) no IterableStream<T> retornado pelas invocações adicionais da API receiveMessages gerará o erro para o aplicativo. Depois que o aplicativo receber esse erro, o aplicativo deverá redefinir o cliente, ou seja, fechar o atual ServiceBusReceiverClient e criar um novo cliente para continuar recebendo mensagens.

Observação: alguns exemplos de erros não retriáveis são : o aplicativo que tenta se conectar a uma fila que não existe, excluindo ou desabilitando a fila no meio do recebimento, o usuário iniciando explicitamente a Geo-DR. Esses são determinados eventos em que o Barramento de Serviço comunica ao cliente que ocorreu um erro não retriável.

Parameters:

maxMessages - O número máximo de mensagens a serem recebidas.
maxWaitTime - O tempo que o cliente aguarda para receber uma mensagem antes de atingir o tempo limite.

Returns:

Uma IterableStream<T> das no máximo maxMessages mensagens da entidade do Barramento de Serviço.

renewMessageLock

public OffsetDateTime renewMessageLock(ServiceBusReceivedMessage message)

Renova o bloqueio na mensagem especificada. O bloqueio será renovado com base na configuração especificada na entidade . Quando uma mensagem é recebida no PEEK_LOCK modo , a mensagem é bloqueada no servidor para essa instância de receptor por uma duração conforme especificado durante a criação da fila (LockDuration). Se o processamento da mensagem exigir mais tempo do que essa duração, o bloqueio precisará ser renovado. Para cada renovação, o bloqueio é redefinido para o valor LockDuration da entidade.

Parameters:

message - O ServiceBusReceivedMessage para executar a renovação de bloqueio.

Returns:

O novo tempo de expiração para a mensagem.

renewMessageLock

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

Inicia a renovação de bloqueio automático para uma mensagem com o bloqueio fornecido.

Parameters:

message - O ServiceBusReceivedMessage para executar a renovação de bloqueio automático.
maxLockRenewalDuration - Duração máxima para continuar renovando o token de bloqueio.
onError - Uma função a ser chamada quando ocorre um erro durante a renovação do bloqueio.

renewSessionLock

public OffsetDateTime renewSessionLock()

Define o estado da sessão se esse receptor for um receptor de sessão.

Returns:

O próximo tempo de expiração para o bloqueio de sessão.

renewSessionLock

public void renewSessionLock(Duration maxLockRenewalDuration, Consumer onError)

Inicia a renovação de bloqueio automático para a sessão para a qual esse receptor funciona.

Parameters:

maxLockRenewalDuration - Duração máxima para continuar renovando a sessão.
onError - Uma função a ser chamada quando ocorre um erro durante a renovação do bloqueio.

rollbackTransaction

public void rollbackTransaction(ServiceBusTransactionContext transactionContext)

Reverte a transação fornecida e todas as operações associadas a ela.

Criando e usando uma transação

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 - A transação a ser revertida.

setSessionState

public void setSessionState(byte[] sessionState)

Define o estado da sessão se esse receptor for um receptor de sessão.

Parameters:

sessionState - Estado a ser definido na sessão.

Aplica-se a