Utilizzo di code DLQ in Amazon SQS - AWS SDK for Java 1. x

La AWS SDK for Java versione 1.x è entrata in modalità manutenzione il 31 luglio 2024 e sarà disponibile il 31 end-of-supportdicembre 2025. Ti consigliamo di eseguire la migrazione a per continuare AWS SDK for Java 2.xa ricevere nuove funzionalità, miglioramenti della disponibilità e aggiornamenti di sicurezza.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di code DLQ in Amazon SQS

Amazon SQSfornisce supporto percode a lettere morte. Una coda a cui altre code (origini) possono mirare per i messaggi che non possono essere elaborati correttamente. Puoi riservare e isolare questi messaggi nella coda DLQ per determinare perché l'elaborazione non è riuscita.

Creazione di una coda a lettere morte

Una coda con lettere morte viene creata allo stesso modo di una coda normale, ma ha le seguenti restrizioni:

  • Una coda con lettere morte deve essere dello stesso tipo di coda (FIFO o standard) della coda di origine.

  • È necessario creare una coda con lettere morte usando la stessaAccount AWSe regione come coda di origine.

Qui creiamo due identiciAmazon SQScode, una delle quali servirà come coda di lettere morte:

Importazioni

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

Codice

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

Vedi l'esempio completo su GitHub.

Designazione di una coda a lettere morte per una coda sorgente

Per designare una coda con lettere morte, è necessario innanzitutto creare unpolitica di redrivee quindi imposta il criterio negli attributi della coda. Un criterio di redrive è specificato in JSON e specifica l'ARN della coda di lettere morte e il numero massimo di volte in cui il messaggio può essere ricevuto e non elaborato prima che venga inviato alla coda delle lettere morte.

Per impostare il criterio di redrive per la coda di origine, chiama la classe AmazonSQS»setQueueAttributesmetodo con unSetQueueAttributesRequestoggetto per il quale hai impostato ilRedrivePolicyattributo con la tua politica di redrive JSON.

Importazioni

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

Codice

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

Vedi l'esempio completo su GitHub.

Ulteriori informazioni