O que é uma fila de mensagens não entregues?

Uma fila de mensagens não entregues (DLQ) é um tipo especial de fila de mensagens que armazena temporariamente mensagens que um sistema de software não pode processar devido a erros. Filas de mensagens são componentes de software que oferecem suporte à comunicação assíncrona em um sistema distribuído. Elas permitem que você envie mensagens entre serviços de software em qualquer volume e não exigem que o destinatário da mensagem esteja sempre disponível. Uma fila de mensagens não entregues armazena especificamente mensagens incorretas que não têm destino ou que não podem ser processadas pelo destinatário pretendido.

Por que as filas de mensagens não entregues são importantes?

As filas de mensagens não entregues (DLQ) existem junto com as filas de mensagens normais. Elas atuam como armazenamento temporário para mensagens incorretas e com falha. As DLQs evitam que a fila de origem fique cheia de mensagens não processadas.

Por exemplo, considere um software que tenha uma fila de mensagens normal e uma DLQ. O software usa a fila normal para armazenar as mensagens que planeja enviar para um destino. Se o destinatário não responder ou processar as mensagens enviadas, o software as moverá para a fila de mensagens não entregues.

Há duas causas possíveis quando as mensagens são transferidas para o pipeline da DLQ: conteúdo incorreto da mensagem e alterações no sistema do destinatário.

Conteúdo de mensagem incorreto

Uma mensagem será movida para uma DLQ se a mensagem transmitida estiver incorreta. As condições de hardware, software e rede podem corromper os dados enviados. Por exemplo, interferências de hardware alteram ligeiramente algumas das informações durante a transmissão. Uma corrupção inesperada dos dados pode fazer com que o destinatário rejeite ou ignore a mensagem.

Mudanças no sistema do destinatário

Uma mensagem também pode ser transferida para uma DLQ quando o software receptor passou por alterações que o remetente desconhece. Por exemplo, você pode tentar atualizar as informações de um cliente enviando uma mensagem para CUST_ID_005. No entanto, o destinatário pode deixar de processar a mensagem recebida porque o cliente foi removido do banco de dados do sistema.

Quais são os benefícios de uma fila de mensagens não entregues?

A seguir, falaremos sobre os benefícios das filas de mensagens não entregues (DLQ).

Custos de comunicação reduzidos

Filas de mensagens regulares ou padrão continuam processando as mensagens até o período de retenção expirar. Isso ajuda a garantir o processamento contínuo de mensagens e minimiza as chances de a sua fila ser bloqueada.

No entanto, se o sistema processar milhares de mensagens, um número alto de mensagens de erro aumentará os custos indiretos de comunicação e sobrecarregará o sistema de comunicação. Em vez de tentar processar mensagens com falha até que elas expirem, é melhor movê-las para uma fila de mensagens não entregues após algumas tentativas de processamento. 

Solução de problemas aprimorada

Se você mover mensagens incorretas para a DLQ, isso permitirá que seus desenvolvedores se concentrem em identificar as causas dos erros. Eles podem investigar por que o destinatário não conseguiu processar as mensagens, aplicar as devidas correções e fazer novas tentativas de entregar essas mensagens.

Por exemplo, um software bancário pode enviar milhares de solicitações de cartão de crédito diariamente para seu sistema de backend para aprovação. A partir daí, o sistema de backend recebe as solicitações, mas não consegue processar todas elas devido a informações incompletas. Em vez de fazer tentativas intermináveis, o software move as mensagens para a DLQ até que a equipe de TI resolva o problema. Isso permite que o sistema processe e entregue as mensagens restantes sem problemas de performance. 

Quando você deve usar uma fila de mensagens não entregues?

Você poderá usar uma fila de mensagens não entregues (DLQ) se seu sistema tiver os seguintes problemas. 

Filas não ordenadas

Você pode aproveitar as DLQs quando suas aplicações não dependem de ordenação. Embora as DLQs ajudem a solucionar operações incorretas de transmissão de mensagens, você deve continuar monitorando suas filas e reenviando mensagens com falha. 

Filas FIFO

A ordenação das mensagens é importante em filas por ordem de chegada (FIFO). Cada mensagem deve ser processada antes da entrega da próxima mensagem. Você pode usar filas de mensagens não entregues com filas FIFO, mas sua implementação da DLQ também deve ser FIFO.

Quando você não deve usar uma fila de mensagens não entregues?

Você não deve usar uma fila de mensagens não entregues (DLQ) com filas não ordenadas quando quiser continuar tentando repetir a transmissão de uma mensagem indefinidamente. Por exemplo, não use uma fila de mensagens não entregues se o seu programa precisar esperar que um processo dependente se torne ativo ou disponível. 

Da mesma forma, você não deve usar uma fila de mensagens não entregues com uma fila por ordem de chegada (FIFO) se não quiser quebrar a ordem exata das mensagens ou operações. Por exemplo, não use uma fila de mensagens não entregues com instruções em uma lista de decisão de edição (EDL) para uma suíte de edição de vídeo. Nesse caso, ao alterar a ordem das edições, você altera o contexto das edições subsequentes.

Como funciona uma fila de mensagens não entregues?

Na maioria das vezes, uma fila de mensagens não entregues (DLQ) funciona como uma fila normal de mensagens. Ela armazena mensagens incorretas até que você as processe para investigar o motivo do erro.

Em seguida, discutimos a política de redirecionamento para DLQs e como as mensagens entram e saem de DLQs.

Criação de uma política de redirecionamento 

O software move as mensagens para uma fila de mensagens não entregues consultando a política de redirecionamento. A política de redirecionamento consiste em regras que determinam quando o software deve mover as mensagens para a fila de mensagens não entregues. Principalmente definindo a contagem máxima de novas tentativas, a política de redirecionamento regula como a fila de origem e a fila de mensagens não entregues interagem entre si. 

Por exemplo, se o desenvolvedor definir o número máximo de tentativas como 1, o sistema transferirá todas as entregas malsucedidas para a DLQ após uma única tentativa. Algumas entregas com falha podem ser causadas por sobrecarga temporária da rede ou problemas de software. Isso envia muitas mensagens não entregues à DLQ. Para obter o equilíbrio certo, os desenvolvedores otimizam a contagem máxima de tentativas para garantir que o software realize tentativas suficientes antes de mover as mensagens para a DLQ.

Mover mensagens para a fila de mensagens não entregues

As tentativas de entrega entre o remetente e o destinatário podem falhar por vários motivos: 

  • O destinatário não recebe a mensagem porque ela não existe. 
  • A mensagem contém erros. 
  • A mensagem excede os limites de fila ou o tamanho da mensagem. Por exemplo, alguns destinatários não conseguem processar mensagens que excedem um tamanho específico. 
  • O tempo de vida (TTL) da mensagem expirou. O TTL é um valor que indica por quanto tempo um determinado pacote de dados é válido na rede. 

Mover mensagens para fora da fila de mensagens não entregues

Quando as mensagens entram na fila de mensagens não entregues, os desenvolvedores inspecionam as mensagens incorretas para determinar as causas. As mensagens na DLQ podem conter informações valiosas para evitar futuras recorrências de problemas semelhantes. Depois que os desenvolvedores analisam e solucionam os problemas, o sistema move as mensagens da DLQ para a fila de origem. Isso permite que o remetente continue processando as mensagens. 

Como a AWS pode atender às suas necessidades de filas de mensagens não entregues?

O Amazon Simple Queue Service (Amazon SQS) fornece uma abordagem escalável para a troca de mensagens entre sistemas distribuídos em grande escala. Os desenvolvedores usam o Amazon SQS para criar aplicações Web confiáveis com filas padrão totalmente gerenciadas e filas por ordem de chegada (FIFO).

Aqui estão outros benefícios do Amazon SQS:

  • O Amazon SQS permite que os sistemas criem um número ilimitado de filas de mensagens
  • Os desenvolvedores podem transferir mensagens em lotes para obter eficiência de custos
  • O Amazon SQS oferece suporte ao bloqueio de mensagens, impedindo que vários computadores processem simultaneamente a mesma mensagem

Comece com a Amazon Web Services (AWS) criando uma conta da AWS hoje mesmo.

Próximas etapas na AWS

Confira recursos adicionais relacionados a produtos
Explore as ofertas gratuitas de integração de aplicativos 
Cadastrar-se para ter uma conta gratuita

Obtenha acesso instantâneo ao nível gratuito da AWS.

Cadastre-se 
Comece a criar no console

Comece a criar no Console de Gerenciamento da AWS.

Faça login