Uso de colas de mensajes fallidos en Amazon SQS - AWS SDK for Java 1.x

La AWS SDK for Java versión 1.x entró en modo de mantenimiento el 31 de julio de 2024 y estará disponible el 31 de end-of-supportdiciembre de 2025. Le recomendamos que migre al para AWS SDK for Java 2.xseguir recibiendo nuevas funciones, mejoras de disponibilidad y actualizaciones de seguridad.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de colas de mensajes fallidos en Amazon SQS

Amazon SQS añade compatibilidad para las colas de mensajes fallidos. Una cola de mensajes fallidos es una cola a la que otras pueden enviar mensajes que no se pueden procesar correctamente. Puede apartar y aislar estos mensajes en la cola de mensajes fallidos para determinar por qué no se procesaron correctamente.

Creación de una cola de mensajes fallidos

Una cola de mensajes fallidos se crea de la misma forma que una cola normal, pero con las siguientes restricciones:

  • Una cola de mensajes fallidos debe ser el mismo tipo de cola (FIFO o estándar) que la cola de origen.

  • Una cola de mensajes fallidos se debe crear con la misma cuenta y región de Cuenta de AWS que la cola de origen.

Aquí creamos dos colas de Amazon SQS idénticas, una de los cuales actuará como la cola de mensajes fallidos:

Importaciones

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

Code

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; } }

Consulte el ejemplo completo en GitHub.

Designación de una cola de mensajes fallidos para una cola de origen

Para designar una cola de mensajes fallidos, primero debe crear una política de redireccionamiento y, a continuación, configurar la política en los atributos de la cola. Una política de redireccionamiento se especifica en JSON e indica el ARN de la cola de mensajes fallidos y el número máximo de veces que se puede recibir y no procesar el mensaje antes de que se envíe a la cola de mensajes fallidos.

Para establecer la política de redireccionamiento de la cola de origen, llame al método de la clase de setQueueAttributes de AmazonSQS con un objeto SetQueueAttributesRequest para el que haya establecido el atributo RedrivePolicy con su política de redireccionamiento JSON.

Importaciones

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

Code

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);

Consulte el ejemplo completo en GitHub.

Más información