Usar fila de mensagens mortas no Amazon SQS - AWS SDK for Java 1.x

O AWS SDK for Java 1.x chegou end-of-support em 31 de dezembro de 2025. Recomendamos que você migre para o AWS SDK for Java 2.x para continuar recebendo novos recursos, melhorias de disponibilidade e atualizações de segurança.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar fila de mensagens mortas no Amazon SQS

O Amazon SQS fornece suporte para filas de mensagens mortas. Uma fila de mensagens mortas é uma fila para a qual outras filas (de origem) podem enviar as mensagens que não são processadas com êxito. Você pode separar e isolar essas mensagens na dead letter queue para determinar por que o processamento não teve sucesso.

Criar uma dead letter queue

Uma dead letter queue é criada da mesma maneira que uma fila regular, mas tem as seguintes restrições:

  • Uma dead letter queue deve ter o mesmo tipo de fila (FIFO ou padrão) da fila de origem.

  • Uma fila de mensagens não entregues deve ser criada usando-se a mesma Conta da AWS e região da fila de origem.

Criamos aqui duas filas do Amazon SQS idênticas, uma que funcionará como a dead letter queue:

Importações

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException;

Código da

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Create source queue try { sqs.createQueue(src_queue_name); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } } // Create dead-letter queue try { sqs.createQueue(dl_queue_name); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }

Veja o exemplo completo no GitHub.

Designar uma dead letter queue para uma fila de origem

Para designar uma fila de mensagens mortas, é necessário criar primeiro uma política de redirecionamento e definir a política nos atributos da fila. Uma política de redirecionamento é especificada em JSON e determina o ARN da fila de mensagens mortas, além do número máximo de vezes em que a mensagem pode ser recebida e não processada antes ser enviada para a fila de mensagens mortas.

Para definir a política de redirecionamento para a fila de origem, chame o método setQueueAttributes da classe do AmazonSQS com um objeto SetQueueAttributesRequest para o qual você definiu o atributo RedrivePolicy com a política de redirecionamento JSON.

Importações

import com.amazonaws.services.sqs.model.GetQueueAttributesRequest; import com.amazonaws.services.sqs.model.GetQueueAttributesResult; import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

Código da

String dl_queue_url = sqs.getQueueUrl(dl_queue_name) .getQueueUrl(); GetQueueAttributesResult queue_attrs = sqs.getQueueAttributes( new GetQueueAttributesRequest(dl_queue_url) .withAttributeNames("QueueArn")); String dl_queue_arn = queue_attrs.getAttributes().get("QueueArn"); // Set dead letter queue with redrive policy on source queue. String src_queue_url = sqs.getQueueUrl(src_queue_name) .getQueueUrl(); SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(src_queue_url) .addAttributesEntry("RedrivePolicy", "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\"" + dl_queue_arn + "\"}"); sqs.setQueueAttributes(request);

Veja o exemplo completo no GitHub.

Mais informações