Administración de mensajes de Amazon SQS grandes mediante Python y Amazon S3 - Amazon Simple Queue Service

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.

Administración de mensajes de Amazon SQS grandes mediante Python y Amazon S3

Utilice la biblioteca de clientes Amazon SQS Extended Client para Python con Amazon S3 para gestionar mensajes de Amazon SQS de gran tamaño, especialmente para cargas útiles de entre 256 KB y 2 GB. La biblioteca almacena la carga útil del mensaje en un bucket de Amazon S3 y envía un mensaje que contiene una referencia al objeto almacenado en la cola de Amazon SQS.

Con la biblioteca de clientes extendida Amazon SQS para Python, puede:

  • Especifique si las cargas útiles se almacenan siempre en Amazon S3 o solo se almacenan en Amazon S3 cuando el tamaño de la carga supera los 256 KB

  • Enviar un mensaje que hace referencia a un único objeto de mensaje almacenado en un bucket de S3

  • Recuperar el objeto de carga útil correspondiente de un bucket de Amazon S3

  • Eliminar el objeto de carga útil correspondiente de un bucket de Amazon S3

Requisitos previos

A continuación, se indican los requisitos previos para utilizar la biblioteca de clientes ampliada de Amazon SQS para Python:

  • Una AWS cuenta con las credenciales necesarias. Para crear una AWS cuenta, vaya a la página de AWS inicio y, a continuación, seleccione Crear una AWS cuenta. Siga las instrucciones. Para obtener información sobre las credenciales, consulte Credenciales.

  • Un AWS SDK: el ejemplo de esta página usa Boto3 del SDK de AWS Python. Para instalar y configurar el SDK, consulte la documentación del AWS SDK para Python en la Guía del desarrollador del AWS SDK para Python

  • Python 3.x (o posterior) y pip.

  • La biblioteca de clientes ampliada de Amazon SQS para Python, disponible en PyPI

nota

Puede utilizar la biblioteca de clientes extendida Amazon SQS para Python para gestionar los mensajes de Amazon SQS mediante Amazon S3 únicamente con el AWS SDK para Python. No puede hacerlo con la AWS CLI, la consola Amazon SQS, la API HTTP de Amazon SQS ni ninguna otra opción. AWS SDKs

Configuración del almacenamiento de mensajes

El cliente ampliado de Amazon SQS utiliza los siguientes atributos de mensaje para configurar las opciones de almacenamiento de mensajes de Amazon S3:

  • large_payload_support: el nombre del bucket de Amazon S3 para almacenar los mensajes de gran tamaño.

  • always_through_s3: si es True, todos los mensajes se almacenan en Amazon S3. Si es False, los mensajes de menos de 256 KB no se serializarán en el bucket de S3. El valor predeterminado es False.

  • use_legacy_attribute: si es True, todos los mensajes publicados utilizan el atributo de mensaje reservado heredado (SQSLargePayloadSize) en lugar del atributo de mensaje reservado actual (ExtendedPayloadSize).

Administración de mensajes grandes de Amazon SQS con la biblioteca de clientes ampliada para Python

En el siguiente ejemplo se crea un bucket de Amazon S3 con un nombre aleatorio. Después crea una cola de Amazon SQS denominada MyQueue y envía a la cola un mensaje almacenado en un bucket de S3 y de más de 256 KB. Por último, el código recupera el mensaje, devuelve información sobre él y, a continuación, elimina el mensaje, la cola y el 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