Compartilhar via


Executar a pré-busca de mensagens do Barramento de Serviço do Azure

O recurso Pré-busca realiza a busca de mensagens em segundo plano em um buffer local de pré-busca até atingir a contagem de pré-busca. As mensagens são fornecidas a partir desse buffer. À medida que isso acontece, o espaço é liberado no buffer e o receptor fará mais uma pré-busca em segundo plano.

Para habilitar o recurso de pré-busca, defina a contagem de pré-busca do cliente de fila ou de assinatura como um número maior que zero. Definir o valor como zero desativa pré-busca. Se existirem mensagens no buffer de pré-busca depois que o recurso for desligado, o aplicativo receberá primeiro essas mensagens do buffer e, depois, buscará no serviço.

Defina a propriedade de contagem de pré-busca nos objetos ServiceBusReceiverOptions e ServiceBusProcessorOptions.

Observação

O SDK de script Java não dá suporte ao recurso de pré-busca.

Enquanto as mensagens estiverem disponíveis no buffer de pré-busca, quaisquer chamadas recebidas de forma subsequente serão imediatamente preenchidas a partir do buffer. O buffer é reabastecido em segundo plano conforme o espaço se torna disponível. Se não houver nenhuma mensagem disponível para entrega, a operação de recebimento esvazia o buffer e aguarda ou bloqueia, conforme esperado.

Pr que a pré-busca não é a opção padrão?

A pré-busca acelera o fluxo de mensagens ao ter uma mensagem prontamente disponível para recuperação local quando e antes do aplicativo solicitar uma. Esse ganho de taxa de transferência é o resultado de uma compensação que o autor do aplicativo deve tomar explicitamente.

Ao usar o modo de recebimento e exclusão, todas as mensagens que são adquiridas no buffer de pré-busca não estão mais disponíveis na fila. As mensagens permanecem apenas no buffer de pré-busca na memória até que sejam recebidas no aplicativo. Se o aplicativo for encerrado antes que as mensagens sejam recebidas no aplicativo, essas mensagens serão perdidas de forma irrecuperável.

Quando você usa o modo de recepção peek lock, as mensagens buscadas no buffer de pré-busca são adquiridas no buffer em um estado bloqueado. O temporizador de bloqueio começa a partir do momento em que a mensagem é pré-buscada no buffer. Se o buffer de pré-busca for grande e processamento demorar tanto que o bloqueio da mensagem expirou enquanto ela residia no buffer de pré-busca ou até mesmo enquanto o aplicativo está processando a mensagem, poderão ocorrer eventos que serão confusos para o aplicativo lidar. O aplicativo pode adquirir uma mensagem com um bloqueio expirado ou prestes a expirar. Nesse caso, o aplicativo pode processar a mensagem, mas depois descobrir que não pode concluir devido à expiração do bloqueio. O aplicativo pode verificar a propriedade LockedUntilUtc, mas lembre-se que existe uma defasagem de tempo entre o agente e o relógio do computador local.

Se o bloqueio expirar silenciosamente no buffer de pré-busca, a mensagem será tratada como abandonada e novamente disponibilizada para recuperação na fila. Depois disso, a mensagem será buscada novamente no buffer de pré-busca e colocada no final. Se o buffer de pré-busca não puder ser processado durante a expiração da mensagem, isso fará com que as mensagens sejam pré-buscadas repetidamente, mas nunca entregues de forma efetiva em um estado utilizável (com bloqueio válido) e serão eventualmente movidas para a fila de mensagens mortas quando o número máximo de entregas for excedido.

Se um aplicativo abandonar uma mensagem de maneira explícita, essa mensagem poderá ser recuperada novamente na fila. Quando a pré-busca está habilitada, a mensagem é buscada no buffer de pré-busca novamente e colocada no final. Como as mensagens do buffer de pré-busca são drenadas na ordem PEPS (primeiro a entrar, primeiro a sair), o aplicativo pode receber mensagens fora de ordem. Por exemplo, o aplicativo pode receber uma mensagem com ID 2 e, em seguida, uma mensagem com ID 1 (que havia sido abandonada anteriormente) do buffer.

Se você precisar de um alto nível de confiabilidade para processamento de mensagens e o processamento exigir tempo e trabalho significativos, é recomendável usar o recurso de pré-busca de forma conservadora ou até mesmo não usá-lo. Se você precisar de uma taxa de transferência alta e o processamento de mensagens normalmente for barato, a pré-busca gerará benefícios de taxa de transferência significativos.

A contagem de pré-busca máxima e a duração do bloqueio configurado na fila ou na assinatura precisam ser equilibradas, de modo que o tempo limite de bloqueio pelo menos exceda o tempo de processamento de mensagem esperado para o tamanho máximo do buffer de pré-busca, mais uma mensagem. Ao mesmo tempo, a duração do bloqueio não deve ser tão longa que as mensagens possam exceder seu tempo máximo de vida útil enquanto estiverem bloqueadas, pois isso significaria que elas seriam removidas se não pudessem ser concluídas quando foram pré-carregadas.

Em 30 de setembro de 2026, desativaremos as bibliotecas do SDK do Barramento de Serviço do Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, que não estão em conformidade com as diretrizes do SDK do Azure. Também encerraremos o suporte ao protocolo SBMP, portanto, ele não poderá mais ser usado após 30 de setembro de 2026. Antes dessa data, migre para as bibliotecas mais recentes do SDK do Azure, que oferecem atualizações de segurança críticas e funcionalidades aprimoradas.

Embora as bibliotecas mais antigas ainda poderão ser usadas após 30 de setembro de 2026, elas não receberão mais suporte e atualizações oficiais da Microsoft. Para obter mais informações, confira o anúncio de desativação do suporte.