Mengelola pesan Amazon SQS besar menggunakan Python dan Amazon S3 - Amazon Simple Queue Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengelola pesan Amazon SQS besar menggunakan Python dan Amazon S3

Gunakan Amazon SQS Amazon SQS Extended Client Library untuk Python dengan Amazon S3 untuk mengelola pesan Amazon SQS besar, terutama untuk muatan antara 256 KB dan 2 GB. Pustaka menyimpan payload pesan dalam bucket Amazon S3 dan mengirimkan pesan yang berisi referensi ke objek yang disimpan dalam antrean Amazon SQS.

Dengan Amazon SQS Extended Client Library untuk Python, Anda dapat:

  • Tentukan apakah muatan selalu disimpan di Amazon S3, atau hanya disimpan di Amazon S3 jika ukuran muatan melebihi 256 KB

  • Kirim pesan yang mereferensikan satu objek pesan yang disimpan di bucket Amazon S3

  • Ambil objek payload yang sesuai dari bucket Amazon S3

  • Hapus objek payload yang sesuai dari bucket Amazon S3

Prasyarat

Berikut ini adalah prasyarat untuk menggunakan Amazon SQS Extended Client Library untuk Python:

catatan

Anda dapat menggunakan Amazon SQS Extended Client Library untuk Python untuk mengelola pesan Amazon SQS menggunakan Amazon S3 hanya dengan SDK untuk Python. AWS Anda tidak dapat melakukan ini dengan AWS CLI, konsol Amazon SQS, Amazon SQS HTTP API, atau yang lainnya. AWS SDKs

Mengkonfigurasi penyimpanan pesan

Amazon SQS Extended Client menggunakan atribut pesan berikut untuk mengonfigurasi opsi penyimpanan pesan Amazon S3:

  • large_payload_support: Nama bucket Amazon S3 untuk menyimpan pesan besar.

  • always_through_s3: JikaTrue, maka semua pesan disimpan di Amazon S3. JikaFalse, pesan yang lebih kecil dari 256 KB tidak akan diserialisasikan ke bucket s3. Nilai default-nya False.

  • use_legacy_attribute: JikaTrue, semua pesan yang dipublikasikan menggunakan atribut pesan cadangan Legacy (SQSLargePayloadSize), bukan atribut pesan cadangan saat ini (ExtendedPayloadSize).

Mengelola pesan Amazon SQS besar dengan Extended Client Library untuk Python

Contoh berikut membuat bucket Amazon S3 dengan nama acak. Kemudian membuat antrian Amazon SQS bernama MyQueue dan mengirim pesan yang disimpan dalam bucket S3 dan lebih dari 256 KB ke antrian. Akhirnya, kode mengambil pesan, mengembalikan informasi tentangnya, dan kemudian menghapus pesan, antrian, dan ember.

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