Gestione di messaggi Amazon SQS di grandi dimensioni con Python e Amazon S3 - Amazon Simple Queue Service

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à.

Gestione di messaggi Amazon SQS di grandi dimensioni con Python e Amazon S3

Usa la Amazon SQS Amazon SQS Extended Client Library for Python con Amazon S3 per gestire messaggi Amazon SQS di grandi dimensioni, in particolare per payload compresi tra 256 KB e 2 GB. La libreria archivia il payload del messaggio in un bucket Amazon S3 e invia un messaggio contenente un riferimento all'oggetto memorizzato nella coda Amazon SQS.

Con la Amazon SQS Extended Client Library per Python, puoi:

  • Specificare se i payload sono sempre archiviati in Amazon S3 o archiviati solo in Amazon S3 quando una dimensione del payload supera i 256 KB

  • Invia un messaggio che fa riferimento a un singolo oggetto di messaggio archiviato in un bucket Amazon S3

  • Recupera l'oggetto payload corrispondente da un bucket Amazon S3

  • Eliminare l'oggetto payload corrispondente da un bucket Amazon S3

Prerequisiti

Di seguito sono riportati i prerequisiti per l'utilizzo della Amazon SQS Extended Client Library for Python:

Nota

Puoi utilizzare Amazon SQS Extended Client Library for Python per gestire i messaggi Amazon SQS utilizzando Amazon S3 solo con l'SDK per Python. AWS Non puoi farlo con la AWS CLI, la console Amazon SQS, l'API HTTP di Amazon SQS o qualsiasi altra. AWS SDKs

Configurazione dello storage dei messaggi

Amazon SQS Extended Client utilizza i seguenti attributi dei messaggi per configurare le opzioni di storage dei messaggi di Amazon S3:

  • large_payload_support: il nome del bucket Amazon S3 per archiviare messaggi di grandi dimensioni.

  • always_through_s3: SeTrue, allora tutti i messaggi vengono archiviati in Amazon S3. SeFalse, i messaggi di dimensioni inferiori a 256 KB non verranno serializzati nel bucket s3. Il valore predefinito è False.

  • use_legacy_attribute: SeTrue, tutti i messaggi pubblicati utilizzano l'attributo Legacy reserved message (SQSLargePayloadSize) anziché l'attuale attributo riservato del messaggio (). ExtendedPayloadSize

Gestione di messaggi Amazon SQS di grandi dimensioni con Extended Client Library for Python

L'esempio seguente crea un bucket Amazon S3 con un nome casuale. Quindi crea una coda Amazon SQS denominata MyQueue e invia un messaggio che viene archiviato in un bucket S3 e contiene più di 256 KB nella coda. Infine, il codice utilizza il messaggio, restituisce informazioni su di esso e poi elimina il messaggio, la coda e il bucket.

import boto3 import sqs_extended_client #Set the Amazon SQS extended client configuration with large payload. sqs_extended_client = boto3.client("sqs", region_name="us-east-1") sqs_extended_client.large_payload_support = "amzn-s3-demo-bucket" sqs_extended_client.use_legacy_attribute = False # Create an SQS message queue for this example. Then, extract the queue URL. queue = sqs_extended_client.create_queue( QueueName = "MyQueue" ) queue_url = sqs_extended_client.get_queue_url( QueueName = "MyQueue" )['QueueUrl'] # Create the S3 bucket and allow message objects to be stored in the bucket. sqs_extended_client.s3_client.create_bucket(Bucket=sqs_extended_client.large_payload_support) # Sending a large message small_message = "s" large_message = small_message * 300000 # Shall cross the limit of 256 KB send_message_response = sqs_extended_client.send_message( QueueUrl=queue_url, MessageBody=large_message ) assert send_message_response['ResponseMetadata']['HTTPStatusCode'] == 200 # Receiving the large message receive_message_response = sqs_extended_client.receive_message( QueueUrl=queue_url, MessageAttributeNames=['All'] ) assert receive_message_response['Messages'][0]['Body'] == large_message receipt_handle = receive_message_response['Messages'][0]['ReceiptHandle'] # Deleting the large message # Set to True for deleting the payload from S3 sqs_extended_client.delete_payload_from_s3 = True delete_message_response = sqs_extended_client.delete_message( QueueUrl=queue_url, ReceiptHandle=receipt_handle ) assert delete_message_response['ResponseMetadata']['HTTPStatusCode'] == 200 # Deleting the queue delete_queue_response = sqs_extended_client.delete_queue( QueueUrl=queue_url ) assert delete_queue_response['ResponseMetadata']['HTTPStatusCode'] == 200