Diferimento de mensagens

Quando um cliente de fila ou assinatura recebe uma mensagem que está disposto a processar, mas o processamento não é possível no momento devido a circunstâncias especiais, ele tem a opção de "adiar" a recuperação da mensagem para um ponto posterior. A mensagem permanece na fila ou na assinatura, mas é deixada de lado.

Nota

As mensagens adiadas não expiram e são movidas automaticamente para uma fila de mensagens mortas até que um aplicativo cliente tente recebê-las usando uma API e o número de sequência. Este comportamento é a predefinição. Quando um cliente tenta recuperar uma mensagem adiada, ela é verificada quanto à condição expirada e movida para uma fila de mensagens mortas se já tiver expirado. Uma mensagem expirada é movida para uma subfila de letra morta somente quando o recurso de letra morta está habilitado para a entidade (fila ou assinatura).

Cenários de exemplo

O adiamento é um recurso criado especificamente para cenários de processamento de fluxo de trabalho. As estruturas de fluxo de trabalho podem exigir que determinadas operações sejam processadas em uma ordem específica. Eles podem ter que adiar o processamento de algumas mensagens recebidas até que o trabalho prévio prescrito que é informado por outras mensagens tenha sido concluído.

Um exemplo ilustrativo simples é uma sequência de processamento de pedidos na qual uma notificação de pagamento de um provedor de pagamento externo aparece em um sistema antes que a ordem de compra correspondente tenha sido propagada da frente da loja para o sistema de atendimento. Nesse caso, o sistema de atendimento pode adiar o processamento da notificação de pagamento até que haja um pedido ao qual associá-la. Em cenários de encontro, em que mensagens de diferentes fontes impulsionam um fluxo de trabalho, a ordem de execução em tempo real pode realmente estar correta, mas as mensagens que refletem os resultados podem chegar fora de ordem.

Em última análise, o adiamento ajuda a reordenar as mensagens da ordem de chegada para uma ordem na qual elas podem ser processadas, deixando essas mensagens com segurança no armazenamento de mensagens para o qual o processamento precisa ser adiado.

Se uma mensagem não puder ser processada porque um recurso específico para lidar com essa mensagem estiver temporariamente indisponível, mas o processamento da mensagem não deve ser suspenso sumariamente, uma maneira de colocar essa mensagem ao lado por alguns minutos é lembrar o número de sequência em uma mensagem agendada a ser postada em alguns minutos e recuperar novamente a mensagem adiada quando a mensagem agendada chegar. Se um manipulador de mensagens depender de um banco de dados para todas as operações e esse banco de dados estiver temporariamente indisponível, ele não deverá usar adiamento, mas sim suspender completamente o recebimento de mensagens até que o banco de dados esteja disponível novamente.

Recuperando mensagens adiadas

As mensagens adiadas permanecem na fila principal junto com todas as outras mensagens ativas (ao contrário das mensagens de letra morta que vivem em uma subfila), mas não podem mais ser recebidas usando as operações de recebimento regulares. As mensagens adiadas podem ser descobertas através da navegação de mensagens ou espreitando se um aplicativo perder o controle delas.

Para recuperar uma mensagem adiada, seu proprietário é responsável por lembrar o número de sequência à medida que o adia. Qualquer recetor que conheça o número de sequência de uma mensagem adiada pode posteriormente receber a mensagem usando métodos de recebimento que tomam o número de sequência como parâmetro. Para obter mais informações sobre números de sequência, consulte Sequenciamento de mensagens e carimbos de data/hora.

Próximos passos

Experimente os exemplos no idioma de sua escolha para explorar os recursos do Barramento de Serviço do Azure.

Veja exemplos para as bibliotecas de cliente .NET e Java mais antigas aqui:

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.