Partilhar via


ServiceBusSessionReceiverClient Classe

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

Implementações

public final class ServiceBusSessionReceiverClient
implements AutoCloseable

Esse cliente receptor de sessão síncrona é usado para adquirir bloqueios de sessão de uma fila ou tópico e criar ServiceBusReceiverClient instâncias vinculadas às sessões bloqueadas. As sessões podem ser usadas como um processamento FIFO (primeiro a entrar em primeiro a sair) de mensagens. Filas e tópicos/assinaturas dão suporte a sessões do Barramento de Serviço, no entanto, ele deve ser habilitado no momento da criação da entidade.

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: receber mensagens de uma sessão específica

Use acceptSession(String sessionId) para adquirir o bloqueio de uma sessão se você souber a ID da sessão. PEEK_LOCK É altamente recomendável para que os usuários tenham controle sobre a liquidação de mensagens.

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

Exemplo: receber mensagens da primeira sessão disponível

Use acceptNextSession() para adquirir o bloqueio da próxima sessão disponível sem especificar a ID da sessão. PEEK_LOCK É altamente recomendável para que os usuários tenham controle sobre a liquidação de mensagens.

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

Resumo do método

Modificador e tipo Método e descrição
ServiceBusReceiverClient acceptNextSession()

Adquire um bloqueio de sessão para a próxima sessão disponível e cria um ServiceBusReceiverClient para receber mensagens da sessão.

ServiceBusReceiverClient acceptSession(String sessionId)

Adquire um bloqueio de sessão para sessionId e cria um ServiceBusReceiverClient para receber mensagens da sessão.

void close()

Métodos herdados de java.lang.Object

Detalhes do método

acceptNextSession

public ServiceBusReceiverClient acceptNextSession()

Adquire um bloqueio de sessão para a próxima sessão disponível e cria um ServiceBusReceiverClient para receber mensagens da sessão. Ele aguardará até que uma sessão esteja disponível se ninguém estiver disponível imediatamente.

Returns:

Um ServiceBusReceiverClient que está vinculado à sessão disponível.

acceptSession

public ServiceBusReceiverClient acceptSession(String sessionId)

Adquire um bloqueio de sessão para sessionId e cria um ServiceBusReceiverClient para receber mensagens da sessão. Se a sessão já estiver bloqueada por outro cliente, um AmqpException será lançado imediatamente.

Parameters:

sessionId - A ID da sessão.

Returns:

Um ServiceBusReceiverClient que está vinculado à sessão especificada.

close

public void close()

Aplica-se a