Gérez les messages Amazon SQS volumineux à l'aide d'Amazon S3 avec un SDK AWS - AWS Exemples de code SDK

D'autres exemples de AWS SDK sont disponibles dans le référentiel AWS Doc SDK Examples GitHub .

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gérez les messages Amazon SQS volumineux à l'aide d'Amazon S3 avec un SDK AWS

L'exemple de code suivant montre comment utiliser la bibliothèque client étendue Amazon SQS pour gérer des messages Amazon SQS volumineux.

Java
SDK pour Java 2.x
Note

Il y en a plus à ce sujet GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le référentiel d'exemples de code AWS.

import com.amazon.sqs.javamessaging.AmazonSQSExtendedClient; import com.amazon.sqs.javamessaging.ExtendedClientConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.BucketLifecycleConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.ExpirationStatus; import software.amazon.awssdk.services.s3.model.LifecycleExpiration; import software.amazon.awssdk.services.s3.model.LifecycleRule; import software.amazon.awssdk.services.s3.model.LifecycleRuleFilter; import software.amazon.awssdk.services.s3.model.ListObjectVersionsRequest; import software.amazon.awssdk.services.s3.model.ListObjectVersionsResponse; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationRequest; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.CreateQueueRequest; import software.amazon.awssdk.services.sqs.model.CreateQueueResponse; import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest; import software.amazon.awssdk.services.sqs.model.Message; import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse; import software.amazon.awssdk.services.sqs.model.SendMessageRequest; import java.util.Arrays; import java.util.List; import java.util.UUID; /** * Example of using Amazon SQS Extended Client Library for Java 2.x. */ public class SqsExtendedClientExample { private static final Logger logger = LoggerFactory.getLogger(SqsExtendedClientExample.class); private String s3BucketName; private String queueUrl; private final String queueName; private final S3Client s3Client; private final SqsClient sqsExtendedClient; private final int messageSize; /** * Constructor with default clients and message size. */ public SqsExtendedClientExample() { this(S3Client.create(), 300000); } /** * Constructor with custom S3 client and message size. * * @param s3Client The S3 client to use * @param messageSize The size of the test message to create */ public SqsExtendedClientExample(S3Client s3Client, int messageSize) { this.s3Client = s3Client; this.messageSize = messageSize; // Generate a unique bucket name. this.s3BucketName = UUID.randomUUID() + "-" + DateTimeFormat.forPattern("yyMMdd-hhmmss").print(new DateTime()); // Generate a unique queue name. this.queueName = "MyQueue-" + UUID.randomUUID(); // Configure the SQS extended client. final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, s3BucketName); this.sqsExtendedClient = new AmazonSQSExtendedClient(SqsClient.builder().build(), extendedClientConfig); } public static void main(String[] args) { SqsExtendedClientExample example = new SqsExtendedClientExample(); try { example.setup(); example.sendAndReceiveMessage(); } finally { example.cleanup(); } } /** * Send a large message and receive it back. * * @return The received message */ public Message sendAndReceiveMessage() { try { // Create a large message. char[] chars = new char[messageSize]; Arrays.fill(chars, 'x'); String largeMessage = new String(chars); // Send the message. final SendMessageRequest sendMessageRequest = SendMessageRequest.builder() .queueUrl(queueUrl) .messageBody(largeMessage) .build(); sqsExtendedClient.sendMessage(sendMessageRequest); logger.info("Sent message of size: {}", largeMessage.length()); // Receive and return the message. final ReceiveMessageResponse receiveMessageResponse = sqsExtendedClient.receiveMessage( ReceiveMessageRequest.builder().queueUrl(queueUrl).build()); List<Message> messages = receiveMessageResponse.messages(); if (messages.isEmpty()) { throw new RuntimeException("No messages received"); } Message message = messages.getFirst(); logger.info("\nMessage received."); logger.info(" ID: {}", message.messageId()); logger.info(" Receipt handle: {}", message.receiptHandle()); logger.info(" Message body size: {}", message.body().length()); logger.info(" Message body (first 5 characters): {}", message.body().substring(0, 5)); return message; } catch (RuntimeException e) { logger.error("Error during message processing: {}", e.getMessage(), e); throw e; } }