Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Se uma aplicação falhar devido a um erro fatal imediatamente após enviar uma mensagem, e a instância da aplicação reiniciada acreditar erroneamente que a entrega anterior da mensagem não ocorreu, um envio subsequente faz com que a mesma mensagem apareça no sistema duas vezes.
Também é possível que um erro no nível do cliente ou da rede ocorra um momento antes e que uma mensagem enviada seja confirmada na fila, com a confirmação não retornada com êxito ao cliente. Este cenário deixa o cliente em dúvida sobre o resultado da operação de envio.
A deteção de duplicados elimina a dúvida nestas situações ao permitir que o remetente reenvie a mesma mensagem, e a fila ou tópico descarta quaisquer cópias duplicadas.
Como funciona
Nota
A camada básica do Service Bus não oferece suporte à deteção de duplicados. Os escalões standard e premium suportam a deteção de duplicados. Para conhecer as diferenças entre esses níveis, consulte Preços do Service Bus.
Permitir a deteção de duplicados ajuda a monitorizar o MessageId controlado pela aplicação de todas as mensagens enviadas para uma fila ou tópico durante uma janela de tempo especificada. Se alguma nova mensagem for enviada com MessageId registada durante a janela de tempo, Service Bus reporta a mensagem como aceite (a operação de envio é bem-sucedida), mas a nova mensagem enviada é instantaneamente ignorada e descartada. Não são consideradas outras partes da mensagem que não o MessageId.
O controlo da aplicação sobre o identificador é essencial porque permite à aplicação ligar o MessageId a um contexto de processo de negócio, a partir do qual pode ser previsivelmente reconstruído quando ocorre uma falha.
Para um processo de negócios no qual várias mensagens são enviadas durante o tratamento de algum contexto de aplicativo, o MessageId pode ser uma composição do identificador de contexto no nível do aplicativo, como um número de ordem de compra, e o assunto da mensagem, por exemplo, 12345.2017/payment.
O MessageId pode ser sempre um GUID, mas ancorar o identificador ao processo de negócio permite uma repetição previsível, o que é importante para usar eficazmente a funcionalidade de deteção de duplicados.
Importante
- Quando o particionamento está habilitado,
MessageId+PartitionKeyé usado para determinar a exclusividade. Quando as sessões estão habilitadas, a chave de partição e o ID da sessão devem ser os mesmos. - Quando o particionamento está desativado (padrão), só
MessageIdé usado para determinar a exclusividade. - Para obter informações sobre
SessionId,PartitionKeyeMessageId, consulte Uso de chaves de partição. - Ao usar partição e enviar lotes de mensagens, certifique-se de que não contêm propriedades identificadoras de partição. Como a desduplicação depende da definição explícita de IDs de mensagem para determinar a exclusividade, não é recomendável usar a desduplicação e o envio em lote juntamente com o particionamento.
Nota
As mensagens agendadas são incluídas na deteção de duplicados. Portanto, se você enviar uma mensagem agendada e, em seguida, enviar uma mensagem não agendada duplicada, a mensagem não agendada será descartada. Da mesma forma, se você enviar uma mensagem não agendada e, em seguida, uma mensagem agendada duplicada, a mensagem agendada será descartada.
Tamanho da janela de deteção de duplicados
Além de ativar a deteção de duplicados, também pode configurar o tamanho da janela de tempo do histórico de deteção de duplicados durante a qual os IDs das mensagens são mantidos. O padrão desse valor é de 10 minutos para filas e tópicos, com um valor mínimo de 20 segundos e um valor máximo de 7 dias.
Ativar a deteção de duplicados e o tamanho da janela afetam diretamente a capacidade de processamento da fila (e do tópico), já que todos os identificadores de mensagens registados devem ser comparados com os recém-submetidos.
Manter a janela pequena significa que menos IDs de mensagem devem ser retidos e correspondidos, e o rendimento sofre menos impacto. Para entidades de alto débito que requerem deteção de duplicados, mantenha a janela o mais pequena possível.
Próximos passos
Pode ativar a deteção de mensagens duplicadas usando o portal Azure, PowerShell, CLI, modelo Resource Manager, .NET, Java, Python e JavaScript. Para obter mais informações, consulte Habilitar deteção de mensagens duplicadas.
Em cenários em que o código cliente não pode reenviar uma mensagem com o mesmo MessageId de antes, projetem mensagens que possam ser reprocessadas em segurança. Este post no blog sobre idempotência descreve várias técnicas de como fazer isso.
Experimente os exemplos no idioma de sua escolha para explorar os recursos do Barramento de Serviço do Azure.
- Exemplos da biblioteca de clientes do Barramento de Serviço do Azure para .NET (versão mais recente)
- Amostras da biblioteca cliente do Azure Service Bus para Java (mais recentes)
- Exemplos de biblioteca de cliente do Barramento de Serviço do Azure para Python
- Exemplos de biblioteca de cliente do Barramento de Serviço do Azure para JavaScript
- Exemplos da biblioteca cliente do Azure Service Bus para TypeScript
Veja exemplos para as bibliotecas de cliente .NET e Java mais antigas aqui:
- Exemplos de biblioteca de cliente do Barramento de Serviço do Azure para .NET (legado)
- Exemplos da biblioteca cliente do Azure Service Bus para Java (legado)
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 descontinuação de suporte.