Adiamento de mensagens no Azure Service Bus

Quando um cliente de fila ou de subscrição recebe uma mensagem que pretende processar, mas cujo processamento não é possível naquele momento devido a circunstâncias especiais, o cliente pode adiar a obtenção da mensagem para mais tarde. A mensagem permanece na fila ou subscrição, mas é posta de lado.

Quando usar o adiamento da mensagem

O adiamento é uma funcionalidade criada especificamente para cenários de processamento de fluxos de trabalho. Os frameworks de workflow podem exigir que certas operações sejam processadas numa ordem específica. Podem ter de adiar o processamento de algumas mensagens recebidas até que o trabalho prévio prescrito, informado por outras mensagens, seja concluído.

Um exemplo ilustrativo simples é uma sequência de processamento de encomendas em que uma notificação de pagamento de um prestador externo de pagamento aparece num sistema antes da ordem correspondente propagar-se da loja para o sistema de cumprimento. Nesse caso, o sistema de processamento de encomendas pode adiar o processamento da notificação de pagamento até existir uma encomenda para lhe associar. Em cenários de encontro, onde mensagens de diferentes fontes impulsionam um fluxo de trabalho, 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 as mensagens da ordem de chegada para uma ordem em que possam ser processadas, mantendo essas mensagens em segurança no armazenamento de mensagens quando o processamento precisa de ser adiado.

Se uma mensagem não puder ser processada porque um determinado recurso para tratar essa mensagem está temporariamente indisponível mas o processamento de mensagens não deve ser suspenso, pode deixar essa mensagem de lado por alguns minutos. Lembre-se do número de sequência numa mensagem agendada para ser publicada dentro de alguns minutos e recupere a mensagem diferida quando a mensagem agendada chegar. Se um manipulador de mensagens depender de uma base de dados para todas as operações e essa base de dados estiver temporariamente indisponível, não use o adiamento. Em vez disso, suspenda completamente a receção de mensagens até que a base de dados volte a estar disponível.

Recuperar mensagens diferidas

As mensagens diferidas permanecem na fila principal juntamente com todas as outras mensagens ativas (ao contrário das mensagens dead-letter que vivem numa subfila), mas já não podem ser recebidas usando as operações regulares de receção. Pode encontrar as mensagens diferidas através da navegação ou consulta de mensagens se uma aplicação perder-lhes o rasto.

Para recuperar uma mensagem diferida, o proprietário é responsável por memorizar o número de sequência ao adiar a mensagem. Qualquer recetor que saiba o número de sequência de uma mensagem diferida pode posteriormente receber a mensagem usando métodos de receção que tomam o número de sequência como parâmetro. Para mais informações sobre números de sequência, consulte Sequenciação de mensagens e carimbos temporais.

Observação

As mensagens diferidas não expiram e passam automaticamente para uma fila de letras mortas até que uma aplicação cliente tente recebê-las usando uma API e o número de sequência. Este comportamento é intencional. Quando um cliente tenta recuperar uma mensagem diferida, esta é verificada quanto à condição expirada e transferida para uma fila de letra morta se já estiver expirada. Uma mensagem expirada passa para uma subfila de letras mortas apenas quando a funcionalidade de letra morta está ativada para a entidade (fila ou subscrição).

Comportamentos-chave das mensagens diferidas

  • As mensagens diferidas ficam na fila principal, não numa subfila.
  • Tem de usar o número de sequência da mensagem para recuperar uma mensagem diferida.
  • As mensagens diferidas podem ser encontradas através da navegação de mensagens (inspeção).
  • Mensagens diferidas só expiram quando um cliente tenta recebê-las.
  • A verificação de expiração ocorre apenas quando um cliente liga a uma API de receção com o número de sequência.

Passos seguintes

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