本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon SQS Amazon SQS Extended Client Library for Python
使用適用於 Python 的 Amazon SQS 擴充用戶端程式庫,您可以:
-
指定承載是否一律存放在 Amazon S3 中,或只在承載大小超過 256 KB 時才存放在 Amazon S3 中
-
傳送參考存放在 Amazon S3 儲存貯體中單一訊息物件的訊息
-
從 Amazon S3 儲存貯體擷取對應的承載物件
-
從 Amazon S3 儲存貯體刪除對應的承載物件
先決條件
以下是使用 Amazon SQS Extended Client Library for Python 的先決條件:
-
具有必要登入資料的 AWS 帳戶。若要建立 AWS 帳戶,請導覽至AWS 首頁
,然後選擇建立 AWS 帳戶 。遵循指示。如需登入資料的資訊,請參閱登入 資料。 -
SDK AWS :此頁面的範例使用 AWS Python SDK Boto3。若要安裝和設定 SDK,請參閱《適用於 AWS Python 的 SDK
AWS 開發人員指南》中的適用於 Python 的 SDK 文件 -
Python 3.x (或更新版本) 和
pip
。 -
Amazon SQS Extended Client Library for Python,可從 PyPI
取得
注意
您可以使用適用於 Python 的 Amazon SQS 擴充用戶端程式庫,僅搭配適用於 Python 的 AWS SDK 使用 Amazon S3 來管理 Amazon SQS 訊息。您無法使用 AWS CLI、Amazon SQS 主控台、Amazon SQS HTTP API 或任何其他 AWS SDKs 來執行此操作。
設定訊息儲存
Amazon SQS 延伸用戶端可讓 使用下列訊息屬性來設定 Amazon S3 訊息儲存選項:
-
large_payload_support
:儲存大型訊息的 Amazon S3 儲存貯體名稱。 -
always_through_s3
:如果為True
,則所有訊息都會存放在 Amazon S3 中。如果False
,小於 256 KB 的訊息將不會序列化至 s3 儲存貯體。預設值為False
。 -
use_legacy_attribute
:如果為True
,則所有已發佈的訊息都會使用舊版預留訊息屬性 (SQSLargePayloadSize
),而非目前的預留訊息屬性 (ExtendedPayloadSize
)。
使用適用於 Python 的擴展用戶端程式庫管理大型 Amazon SQS 訊息
下列範例會建立具有隨機名稱的 Amazon S3 儲存貯體。然後,它會建立名為 的 Amazon SQS 佇列,MyQueue
並將存放在 S3 儲存貯體中且超過 256 KB 的訊息傳送至佇列。最後,程式碼會擷取該訊息,傳回訊息的相關資訊,接著刪除訊息、佇列和儲存貯體。
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