Pré-buscar mensagens do Barramento de Serviço do Azure
O recurso de pré-busca busca mensagens em segundo plano em um buffer de pré-busca local até a contagem de pré-busca. As mensagens são servidas a partir do buffer. Acontece que o espaço é liberado no buffer, e o recetor irá pré-buscar mais em segundo plano.
Para habilitar o recurso de pré-busca, defina a contagem de pré-busca da fila ou do cliente de assinatura como um número maior que zero. Definir o valor como zero desativa a pré-busca. Se houver mensagens no buffer de pré-busca depois que o recurso for desativado, o aplicativo receberá essas mensagens do buffer primeiro e, em seguida, irá para o serviço.
Defina a propriedade prefetch count nos objetos ServiceBusReceiverOptions e ServiceBusProcessorOptions .
Nota
O Java Script SDK não suporta o recurso de pré-busca .
Enquanto as mensagens estão disponíveis no buffer de pré-busca, todas as chamadas de recebimento subsequentes são imediatamente atendidas a partir do buffer. O buffer é reabastecido em segundo plano à medida que o espaço fica disponível. Se não houver mensagens disponíveis para entrega, a operação de recebimento esvazia o buffer e, em seguida, aguarda ou bloqueia, conforme o esperado.
Por 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 antes que o aplicativo solicite uma. Esse ganho de taxa de transferência é o resultado de uma compensação que o autor do aplicativo deve fazer explicitamente.
Quando você usa o modo de recebimento e exclusão , todas as mensagens 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é serem recebidas no aplicativo. Se o aplicativo terminar antes que as mensagens sejam recebidas no aplicativo, essas mensagens serão irrecuperáveis (perdidas).
Quando você usa o modo de recebimento 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 o processamento demorar tanto que os bloqueios de mensagem expiram enquanto permanecem no buffer de pré-busca ou mesmo enquanto o aplicativo está processando a mensagem, pode haver alguns eventos confusos para o aplicativo manipular. O aplicativo pode adquirir uma mensagem com um bloqueio expirado ou expirando iminentemente. Em caso afirmativo, o aplicativo pode processar a mensagem, mas descobrir que não pode concluí-la devido a uma expiração de bloqueio. O aplicativo pode verificar a LockedUntilUtc
propriedade, mas lembre-se de que há distorção de relógio entre o corretor e o relógio da máquina local.
Se o bloqueio expirar silenciosamente no buffer de pré-busca, a mensagem será tratada como abandonada e será novamente disponibilizada para recuperação da fila. Em seguida, a mensagem será buscada novamente no buffer de pré-busca e colocada no final Se o buffer de pré-busca geralmente não puder ser trabalhado durante a expiração da mensagem, as mensagens são repetidamente pré-buscadas, mas nunca efetivamente entregues em um estado utilizável (validamente bloqueado) e, eventualmente, são movidas para a fila de mensagens mortas quando a contagem máxima de entrega é excedida.
Se um aplicativo abandonar explicitamente uma mensagem, a mensagem poderá estar novamente disponível para recuperação da fila. Quando a pré-busca está ativada, 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 FIFO (first-in, first-out), 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 foi abandonada anteriormente) do buffer.
Se você precisa de um alto grau de confiabilidade para o processamento de mensagens, e o processamento leva trabalho e tempo significativos, recomendamos que você use o recurso de pré-busca de forma conservadora, ou não use nada. Se você precisar de alta taxa de transferência e o processamento de mensagens for geralmente barato, a pré-busca produz benefícios significativos de taxa de transferência.
A contagem máxima de pré-busca e a duração do bloqueio configuradas na fila ou na assinatura precisam ser balanceadas para que o tempo limite de bloqueio exceda pelo menos o tempo de processamento de mensagem acumulado esperado para o tamanho máximo do buffer de pré-busca, além de 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 enquanto estão bloqueadas, pois isso significaria que elas seriam removidas se não pudessem ser concluídas quando foram pré-buscadas.
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, para que você não possa mais usar esse protocolo após 30 de setembro de 2026. Migre para as bibliotecas mais recentes do SDK do Azure, que oferecem atualizações de segurança críticas e recursos aprimorados, antes dessa data.
Embora as bibliotecas mais antigas ainda possam 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, consulte o anúncio de aposentadoria de suporte.