Gestion de messages Amazon SQS volumineux à l'aide de Python et Amazon S3 - Amazon Simple Queue Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestion de messages Amazon SQS volumineux à l'aide de Python et Amazon S3

Utilisez la bibliothèque client étendue Amazon SQS Amazon SQS pour Python avec Amazon S3 pour gérer les messages Amazon SQS volumineux, en particulier pour les charges utiles comprises entre 256 Ko et 2 Go. La bibliothèque stocke la charge utile du message dans un compartiment Amazon S3 et envoie un message contenant une référence à l'objet stocké dans la file d'attente Amazon SQS.

Avec la bibliothèque client étendue Amazon SQS pour Python, vous pouvez :

  • Spécifiez si les charges utiles sont toujours stockées dans Amazon S3 ou uniquement stockées dans Amazon S3 lorsque la taille de la charge utile dépasse 256 Ko

  • Envoyer un message qui fait référence à un seul objet de message stocké dans un compartiment Amazon S3

  • Récupérez l'objet de charge utile correspondant dans un compartiment Amazon S3

  • Supprimer l'objet de charge utile correspondant d'un compartiment Amazon S3

Prérequis

Les conditions requises pour utiliser la bibliothèque client étendue Amazon SQS pour Python sont les suivantes :

Note

Vous pouvez utiliser la bibliothèque client étendue Amazon SQS pour Python pour gérer les messages Amazon SQS à l'aide d'Amazon S3 uniquement avec le AWS SDK pour Python. Vous ne pouvez pas le faire avec la AWS CLI, la console Amazon SQS, l'API HTTP Amazon SQS ou toute autre solution. AWS SDKs

Configurer le stockage de messages

Le client Amazon SQS Extended utilise les attributs de message suivants pour configurer les options de stockage des messages Amazon S3 :

  • large_payload_support: nom du compartiment Amazon S3 pour stocker les messages volumineux.

  • always_through_s3: SiTrue, alors tous les messages sont stockés dans Amazon S3. Dans False le cas contraire, les messages inférieurs à 256 Ko ne seront pas sérialisés dans le compartiment s3. L’argument par défaut est False.

  • use_legacy_attribute: Si tous True les messages publiés utilisent l'attribut de message réservé Legacy (SQSLargePayloadSize) au lieu de l'attribut de message réservé actuel (ExtendedPayloadSize).

Gestion de messages Amazon SQS volumineux avec la bibliothèque client étendue pour Python

L'exemple suivant crée un compartiment Amazon S3 avec un nom aléatoire. Il crée ensuite une file d'attente Amazon SQS nommée MyQueue et envoie un message qui est stocké dans un compartiment S3 et dont la taille est supérieure à 256 Ko à la file d'attente. Enfin, le code récupère le message, renvoie des informations sur ce dernier et le supprime, ainsi que la file d'attente et le compartiment.

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