DEV Community

Paula Santana
Paula Santana

Posted on

Criando DLQ no SQS

O que é?

Filas de mensagens mortas, acaba sendo uma fila, mas com um objetivo diferente. Esta fila irá receber as mensagens que não foram processadas em sua fila de origem.

Contextualizando

Normalmente quando um consumidor tenta por vezes processar uma mensagem e por algum motivo não conseguem essa mensagem retorna para a fila. E o ciclo de tentativa de leitura se repete e para que as demais mensagens da fila sejam processadas o ideal é redirecionarmos as mensagens que estão com algum problema.

Um exemplo clássico pode ser no modelo da mensagem, o produtor da mensagem gerou o modelo de forma diferente do que o consumidor espera.

No SQS podemos fazer o controle desse redirecionamento através da configuração de qual seria a fila utilizada como DLQ e qual a quantidade máxima de tentativas de leitura máxima para que então seja redirecionada a mensagem.

O uso de DLQ varia muito de acordo com o Broker/ MOM que estamos utilizando, esse artigo via explicar apenas como proceder utilizando o SQS.

EXEMPLO

Exemplo de como realizamos via comando do AWS CLI a criação da DLQ, o exemplo abaixo estou utilizando Localstack localmente:

Vamos primeiramente criar uma fila usando a AWS CLI que será a nossa DLQ:

aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name aviso_dlq
Enter fullscreen mode Exit fullscreen mode

Agora vamos criar a fila principal para receber as mensagens e então vamos configurar os parâmetros de DLQ dela:

aws sqs create-queue --queue-name aviso \
    --attributes '{"RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:sa-east-1:000000000000:aviso_dlq\",\"maxReceiveCount\":\"4\"}"}' \
    --endpoint-url=http://localhost:4566
Enter fullscreen mode Exit fullscreen mode

Vejam que configuramos o deadLetterTargetArn e o maxReceiveCount, o primeiro parâmetro indica o endereço ARN da fila que criamos para ser a DLQ e o segundo parâmetro irá indicar a quantidade máxima que podemos fazer a tentativa de leitura da mensagem .

Exemplo do comando que fiz para consultar via AWS CLI o endereço ARN, para também serve para consultar qualquer outro atributo da fila:

aws --endpoint-url=http://localhost:4566 sqs get-queue-attributes --queue-url http://localhost:4566/000000000000/aviso_dlq --attribute-names All
Enter fullscreen mode Exit fullscreen mode

Redrive allow policy

O AWS SQS tem um recurso que permite que sejam redirecionadas mensagens da fila DLQ para a fila de origem ou outra para que estas sejam processadas de fato pelo consumidor.
Este recurso ainda esta limitado somente ao console da AWS mas evita que sejam criados processamentos adicionais para realizar este fluxo.

Top comments (0)