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
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
Mais informações
-
Usar filas de mensagens não entregues doAmazon SQS no Guia do desenvolvedor do Amazon SQS
-
SetQueueAttributes na Referência de API do Amazon SQS