Verwaltung großer Amazon SQS SQS-Nachrichten mit Python und Amazon S3 - Amazon Simple Queue Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwaltung großer Amazon SQS SQS-Nachrichten mit Python und Amazon S3

Verwenden Sie die Amazon SQS Amazon SQS Extended Client Library for Python mit Amazon S3, um große Amazon SQS SQS-Nachrichten zu verwalten, insbesondere für Nutzlasten zwischen 256 KB und 2 GB. Die Bibliothek speichert die Nachrichtennutzlast in einem Amazon S3 S3-Bucket und sendet eine Nachricht mit einem Verweis auf das gespeicherte Objekt in der Amazon SQS SQS-Warteschlange.

Mit der Amazon SQS Extended Client Library für Python können Sie:

  • Geben Sie an, ob Payloads immer in Amazon S3 oder nur in Amazon S3 gespeichert werden, wenn die Payloadgröße 256 KB überschreitet

  • Senden Sie eine Nachricht, die auf ein einzelnes Nachrichtenobjekt verweist, das in einem Amazon S3 S3-Bucket gespeichert ist

  • Rufen Sie das entsprechende Payload-Objekt aus einem Amazon S3 S3-Bucket ab

  • Löschen Sie das entsprechende Payload-Objekt aus einem Amazon S3 S3-Bucket

Voraussetzungen

Im Folgenden sind die Voraussetzungen für die Verwendung der Amazon SQS Extended Client Library für Python aufgeführt:

Anmerkung

Sie können die Amazon SQS Extended Client Library for Python verwenden, um Amazon SQS SQS-Nachrichten mithilfe von Amazon S3 nur mit dem AWS SDK für Python zu verwalten. Sie können dies nicht mit der AWS CLI, der Amazon SQS SQS-Konsole, der Amazon SQS SQS-HTTP-API oder einer der anderen tun. AWS SDKs

Konfigurieren der Nachrichtenspeicherung

Der Amazon SQS Extended Client verwendet die folgenden Nachrichtenattribute, um die Amazon S3 S3-Nachrichtenspeicheroptionen zu konfigurieren:

  • large_payload_support: Der Amazon S3 S3-Bucket-Name zum Speichern großer Nachrichten.

  • always_through_s3: WennTrue, dann werden alle Nachrichten in Amazon S3 gespeichert. FallsFalse, werden Nachrichten, die kleiner als 256 KB sind, nicht in den S3-Bucket serialisiert. Der Standardwert ist False.

  • use_legacy_attribute: Falls True alle veröffentlichten Nachrichten das reservierte Nachrichtenattribut Legacy (SQSLargePayloadSize) anstelle des aktuellen reservierten Nachrichtenattributs (ExtendedPayloadSize) verwenden.

Verwaltung großer Amazon SQS SQS-Nachrichten mit der Extended Client Library für Python

Das folgende Beispiel erstellt einen Amazon S3 S3-Bucket mit einem zufälligen Namen. Anschließend erstellt es eine Amazon SQS SQS-Warteschlange mit dem Namen MyQueue und sendet eine Nachricht, die in einem S3-Bucket gespeichert ist und mehr als 256 KB groß ist, an die Warteschlange. Schließlich ruft der Code die Nachricht ab, gibt Informationen über die Nachricht zurück und löscht die Nachricht, die Warteschlange und den 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