AWS SDK와 함께 Amazon S3를 사용하여 대규모 Amazon SQS 메시지 관리 Amazon S3 - AWS SDK 코드 예제

Doc AWS SDK 예제 GitHub 리포지토리에서 더 많은 SDK 예제를 사용할 수 있습니다. AWS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK와 함께 Amazon S3를 사용하여 대규모 Amazon SQS 메시지 관리 Amazon S3

다음 코드 예제에서는 Amazon SQS 확장 클라이언트 라이브러리를 사용하여 대규모 Amazon SQS 메시지로 작업하는 방법을 보여줍니다.

Java
SDK for Java 2.x
참고

GitHub에 더 많은 내용이 있습니다. 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; } }