As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Gerenciar mensagens grandes do Amazon SQS usando Python e Amazon S3
Use a biblioteca do cliente em versão ampliada para Python do Amazon SQS
Com a biblioteca do cliente em versão ampliada para Python do Amazon SQS, você pode:
-
Especificar se as cargas úteis devem ser sempre armazenadas no Amazon S3 ou apenas no Amazon S3 quando uma carga útil tiver mais de 256 KB.
-
Enviar uma mensagem que faça referência a um único objeto de mensagem armazenado em um bucket do Amazon S3.
-
Recuperar o objeto de carga útil correspondente de um bucket do Amazon S3
-
Excluir o objeto de carga útil correspondente de um bucket do Amazon S3
Pré-requisitos
Veja abaixo os pré-requisitos para usar a biblioteca do cliente em versão ampliada para Python do Amazon SQS:
-
Uma conta da AWS com as credenciais necessárias. Para criar uma conta da AWS, acesse a página inicial da AWS
e escolha Criar uma conta da AWS. Siga as instruções. Consulte informações sobre credenciais em Credentials . -
Um SDK da AWS: o exemplo nesta página usa o AWS Python SDK Boto3. Para instalar e configurar o SDK, consulte a documentação do AWS SDK para Python
no Guia do desenvolvedor do AWS SDK para Python -
Python 3.x (ou posterior) e
pip. -
A biblioteca do cliente em versão ampliada para Python do Amazon SQS, também disponível no PyPI
nota
É possível usar a biblioteca do cliente em versão ampliada para Python do Amazon SQS para gerenciar mensagens do Amazon SQS usando o Amazon S3 somente com o AWS SDK para Python. Você pode fazer isso com a AWS CLI, o console do Amazon SQS, a API HTTP do Amazon SQS ou qualquer um dos outros SDKs da AWS.
Configurar o armazenamento de mensagens
O cliente em versão ampliada do Amazon SQS usa os seguintes atributos de mensagem para configurar as opções de armazenamento de mensagens do Amazon S3:
-
large_payload_support: o nome do bucket do Amazon S3 para armazenar mensagens grandes. -
always_through_s3: seTrue, então todas as mensagens serão armazenadas no Amazon S3. SeFalse, mensagens menores que 256 KB não serão serializadas no bucket do S3. O padrão é “”.False. -
use_legacy_attribute: seTrue, todas as mensagens publicadas usam o atributo de mensagem reservada legado (SQSLargePayloadSize) em vez do atributo de mensagem reservada atual (ExtendedPayloadSize).
Gerenciar mensagens grandes do Amazon SQS com a biblioteca do cliente em versão ampliada para Python
O exemplo a seguir cria um bucket do Amazon S3 com um nome aleatório. Depois, ele cria uma fila do Amazon SQS chamada MyQueue e envia para ela uma mensagem que é armazenada em um bucket do S3 e é maior que 256 KB. Por fim, o código recupera a mensagem, retorna informações sobre ela e, em seguida, exclui a mensagem, a fila e o 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