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

AWS SDK 예제 GitHub 리포지토리에 더 많은 AWS문서 SDK 예제가 있습니다.

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

다음 코드 예제에서는 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; } }