ServiceBusReceiverClient Classe
- java.
lang. Object - com.
azure. messaging. servicebus. ServiceBusReceiverClient
- com.
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. |
Service |
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ão |
byte[] |
getSessionState()
Obtém o estado da sessão se esse receptor for um receptor de sessão. |
Service |
peekMessage()
Lê a próxima mensagem ativa sem alterar o estado do receptor ou a origem da mensagem. |
Service |
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. |
Iterable |
peekMessages(int maxMessages)
Lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem. |
Iterable |
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. |
Service |
receiveDeferredMessage(long sequenceNumber)
Recebe um adiado ServiceBusReceivedMessage. |
Iterable |
receiveDeferredMessageBatch(Iterable<Long> sequenceNumbers)
Recebe um lote de adiado ServiceBusReceivedMessage. |
Iterable |
receiveMessages(int maxMessages)
Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço. |
Iterable |
receiveMessages(int maxMessages, Duration maxWaitTime)
Recebe um fluxo iterável da ServiceBusReceivedMessage entidade do Barramento de Serviço. |
Offset |
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. |
Offset |
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:
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:
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:
complete
public void complete(ServiceBusReceivedMessage message)
Conclui um ServiceBusReceivedMessage. Isso excluirá a mensagem do serviço.
Parameters:
complete
public void complete(ServiceBusReceivedMessage message, CompleteOptions options)
Conclui um ServiceBusReceivedMessage. Isso excluirá a mensagem do serviço.
Parameters:
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:
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:
defer
public void defer(ServiceBusReceivedMessage message)
Adia um ServiceBusReceivedMessage. Isso moverá a mensagem para a subconsulta adiada.
Parameters:
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:
getEntityPath
public String getEntityPath()
Obtém o recurso do Barramento de Serviço com o qual esse cliente interage.
Returns:
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:
getIdentifier
public String getIdentifier()
Obtém o identificador da instância de ServiceBusReceiverClient.
Returns:
getSessionId
public String getSessionId()
Obtém a SessionId da sessão se esse receptor for um receptor de sessão.
Returns:
getSessionState
public byte[] getSessionState()
Obtém o estado da sessão se esse receptor for um receptor de sessão.
Returns:
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:
Returns:
peekMessages
public IterableStream
Lê o próximo lote de mensagens ativas sem alterar o estado do receptor ou a origem da mensagem.
Parameters:
Returns:
peekMessages
public IterableStream
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:
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:
Returns:
sequenceNumber
.receiveDeferredMessageBatch
public IterableStream
Recebe um lote de adiado ServiceBusReceivedMessage. Mensagens adiadas só podem ser recebidas usando o número de sequência.
Parameters:
Returns:
receiveMessages
public IterableStream
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:
Returns:
maxMessages
mensagens da entidade do Barramento de Serviço.receiveMessages
public IterableStream
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:
Returns:
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:
Returns:
renewMessageLock
public void renewMessageLock(ServiceBusReceivedMessage message, Duration maxLockRenewalDuration, Consumer
Inicia a renovação de bloqueio automático para uma mensagem com o bloqueio fornecido.
Parameters:
renewSessionLock
public OffsetDateTime renewSessionLock()
Define o estado da sessão se esse receptor for um receptor de sessão.
Returns:
renewSessionLock
public void renewSessionLock(Duration maxLockRenewalDuration, Consumer
Inicia a renovação de bloqueio automático para a sessão para a qual esse receptor funciona.
Parameters:
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:
setSessionState
public void setSessionState(byte[] sessionState)
Define o estado da sessão se esse receptor for um receptor de sessão.
Parameters:
Aplica-se a
Azure SDK for Java