Adiamento da mensagem no Barramento de Serviço do Azure

Quando um cliente de uma fila ou assinatura recebe uma mensagem que pretende processar, mas cujo processamento não é possível no momento devido a circunstâncias especiais, o cliente pode postergar a recuperação da mensagem para um momento posterior. A mensagem permanece na fila ou assinatura, mas é reservada.

Quando usar o adiamento da mensagem

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 determinada ordem. Eles podem ter que adiar o processamento de algumas mensagens recebidas até que o trabalho anterior prescrito informado por outras mensagens seja 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 se propague da vitrine para o sistema de atendimento. Nesse caso, o sistema de processamento de pedidos 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 levam um fluxo de trabalho adiante, a ordem de execução em tempo real pode estar correta, mas as mensagens que refletem os resultados podem chegar fora de ordem.

O adiamento ajuda a reordenar mensagens da ordem de chegada em uma ordem na qual elas podem ser processadas, deixando essas mensagens com segurança no repositório de mensagens quando o processamento precisa ser adiado.

Se uma mensagem não puder ser processada porque um recurso específico para lidar com essa mensagem está temporariamente indisponível, mas o processamento de mensagens não deve ser suspenso, você pode deixar essa mensagem de lado por alguns minutos. Lembre-se do número de sequência em uma mensagem agendada a ser postada em alguns minutos e recupere 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, não use adiamento. Em vez disso, suspenda completamente o recebimento de mensagens até que o banco de dados esteja disponível novamente.

Recuperar mensagens adiadas

As mensagens diferidas permanecem na fila principal junto com todas as outras mensagens ativas (ao contrário das mensagens mortas, que ficam em uma subfila), mas não podem mais ser recebidas por meio das operações regulares de recebimento. Você pode descobrir mensagens adiadas por meio de navegação de mensagens ou espiando se um aplicativo perder o controle delas.

Para recuperar uma mensagem adiada, o responsável deve se lembrar do número de sequência ao adiar a mensagem. Qualquer receptor que conheça o número de sequência de uma mensagem adiada poderá receber a mensagem mais tarde usando métodos de recebimento que usam o número da sequência como um parâmetro. Para obter mais informações sobre números de sequência, consulte Sequenciamento de mensagens e carimbos de data/hora.

Observação

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. Esse comportamento é por design. Quando um cliente tenta recuperar uma mensagem adiada, ela é verificada quanto à condição expirada e movida para uma fila de mensagens mortas se ela já tiver expirado. Uma mensagem expirada é movida para uma subfila de mensagens mortas somente quando o recurso de dead-letter está habilitado para a entidade (fila ou assinatura).

Principais comportamentos de mensagens adiadas

  • As mensagens adiadas permanecem na fila principal, não em uma subfila.
  • Você deve usar o número de sequência da mensagem para recuperar uma mensagem adiada.
  • Mensagens adiadas podem ser descobertas por meio da navegação de mensagens (espiando).
  • As mensagens adiadas não expiram até que um cliente tente recebê-las.
  • A verificação de expiração ocorre somente quando um cliente chama uma API de recebimento com o número de sequência.

Próximas Etapas 

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