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 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:
-
AWS Akun dengan kredensi yang diperlukan. Untuk membuat AWS akun, navigasikan ke AWS halaman
beranda, lalu pilih Buat AWS Akun. Ikuti petunjuk online. Untuk informasi tentang kredensial, lihat Kredensional. -
AWS SDK: Contoh pada halaman ini menggunakan AWS Python SDK Boto3. Untuk menginstal dan menyiapkan SDK, lihat dokumentasi SDK untuk Python di AWS SDK for Python
Developer Guide AWS -
Python 3.x (atau yang lebih baru) dan.
pip
-
Perpustakaan Klien Diperpanjang Amazon SQS untuk Python, tersedia dari PyPI
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-nyaFalse
. -
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