選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Python 和 Amazon S3 管理大型 Amazon SQS 訊息 Amazon S3

焦點模式
使用 Python 和 Amazon S3 管理大型 Amazon SQS 訊息 Amazon S3 - Amazon Simple Queue Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon SQS Amazon SQS Extended Client Library for Python 搭配 Amazon S3 來管理大型 Amazon SQS 訊息,尤其是 256 KB 到 2 GB 之間的承載。程式庫會將訊息承載存放在 Amazon S3 儲存貯體中,並傳送訊息,其中包含對 Amazon SQS 佇列中存放物件的參考。

使用適用於 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
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。