Amazon S3를 사용하여 대규모 Amazon SQS 메시지 관리 - Amazon Simple Queue Service

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

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

대규모 Amazon Simple Queue Service (Amazon SQS) 메시지를 관리하기 위해 Amazon Simple Storage Service (Amazon S3) 및 Java용 Amazon SQS 확장 클라이언트 라이브러리를 사용할 수 있습니다. 이 기능은 특히 최대 2GB의 메시지를 저장하고 사용할 때 유용합니다. 애플리케이션에서 대기열을 반복해서 생성하고 대기열을 비활성으로 두거나 대기열에 대량의 데이터를 저장하지 않아도 되는 경우, Amazon S3 사용하여 데이터를 저장하는 것이 좋습니다.

Java용 Amazon SQS 확장 클라이언트 라이브러리를 사용하여 다음을 수행할 수 있습니다.

  • 메시지를 항상 Amazon S3 저장할지를 지정하거나, 메시지 크기가 256KB를 초과할 때에만 저장할지를 지정합니다.

  • S3 버킷에 저장된 단일 메시지 객체를 참조하는 메시지 전송

  • S3 버킷에서 메시지 객체 검색

  • S3 버킷에서 메시지 객체 삭제

자바용 Amazon SQS 확장 클라이언트 라이브러리를 사용하여 Amazon S3를 사용하여 Amazon SQS 메시지를 관리할 수 있습니다.와 함께AWS SDK for Java. 다음과 같이 수행할 수 없습니다.AWS CLI, Amazon SQS 콘솔, Amazon SQS HTTP API 또는기타 AWSSDK.

Java용 SDKJava용 Amazon SQS 확장 클라이언트 라이브러리에는 J2SE Development Kit 8.0 이상이 필요합니다.

Prerequisites

다음 예제에서는 AWS Java SDK를 사용합니다. SDK를 설치 및 설정하려면 AWS SDK for Java 개발자 안내서AWS SDK for Java 설정을 참조하세요.

예제 코드를 실행하기 전에 AWS 자격 증명을 구성합니다. 자세한 내용은 단원을 참조하십시오.설정AWS개발을 위한 자격 증명 및 리전AWS SDK for Java개발자 안내서.

예: Amazon S3 사용하여 대규모 Amazon SQS 메시지 관리

다음 예제에서는 임의의 이름이 부여된 Amazon S3 버킷을 생성하고 수명 주기 규칙을 추가하여 14일 이후에는 객체를 영구 삭제합니다. 또한 라는 대기열을 생성합니다.MyQueue및 은 S3 버킷에 저장되고 256KB 이상인 임의의 메시지를 대기열에 보냅니다. 마지막으로 이 코드는 메시지를 검색하고, 메시지에 대한 정보를 반환한 후 메시지, 대기열 및 버킷을 삭제합니다.

/* * Copyright 2010-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ import com.amazon.sqs.javamessaging.AmazonSQSExtendedClient; import com.amazon.sqs.javamessaging.ExtendedClientConfiguration; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.*; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import java.util.Arrays; import java.util.List; import java.util.UUID; public class SQSExtendedClientExample { // Create an Amazon S3 bucket with a random name. private final static String S3_BUCKET_NAME = UUID.randomUUID() + "-" + DateTimeFormat.forPattern("yyMMdd-hhmmss").print(new DateTime()); public static void main(String[] args) { /* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); /* * Set the Amazon S3 bucket name, and then set a lifecycle rule on the * bucket to permanently delete objects 14 days after each object's * creation date. */ final BucketLifecycleConfiguration.Rule expirationRule = new BucketLifecycleConfiguration.Rule(); expirationRule.withExpirationInDays(14).withStatus("Enabled"); final BucketLifecycleConfiguration lifecycleConfig = new BucketLifecycleConfiguration().withRules(expirationRule); // Create the bucket and allow message objects to be stored in the bucket. s3.createBucket(S3_BUCKET_NAME); s3.setBucketLifecycleConfiguration(S3_BUCKET_NAME, lifecycleConfig); System.out.println("Bucket created and configured."); /* * Set the Amazon SQS extended client configuration with large payload * support enabled. */ final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration() .withLargePayloadSupportEnabled(s3, S3_BUCKET_NAME); final AmazonSQS sqsExtended = new AmazonSQSExtendedClient(AmazonSQSClientBuilder .defaultClient(), extendedClientConfig); /* * Create a long string of characters for the message object which will * be stored in the bucket. */ int stringLength = 300000; char[] chars = new char[stringLength]; Arrays.fill(chars, 'x'); final String myLongString = new String(chars); // Create a message queue for this example. final String QueueName = "MyQueue" + UUID.randomUUID().toString(); final CreateQueueRequest createQueueRequest = new CreateQueueRequest(QueueName); final String myQueueUrl = sqsExtended .createQueue(createQueueRequest).getQueueUrl(); System.out.println("Queue created."); // Send the message. final SendMessageRequest myMessageRequest = new SendMessageRequest(myQueueUrl, myLongString); sqsExtended.sendMessage(myMessageRequest); System.out.println("Sent the message."); // Receive the message. final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl); List<Message> messages = sqsExtended .receiveMessage(receiveMessageRequest).getMessages(); // Print information about the message. for (Message message : messages) { System.out.println("\nMessage received."); System.out.println(" ID: " + message.getMessageId()); System.out.println(" Receipt handle: " + message.getReceiptHandle()); System.out.println(" Message body (first 5 characters): " + message.getBody().substring(0, 5)); } // Delete the message, the queue, and the bucket. final String messageReceiptHandle = messages.get(0).getReceiptHandle(); sqsExtended.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageReceiptHandle)); System.out.println("Deleted the message."); sqsExtended.deleteQueue(new DeleteQueueRequest(myQueueUrl)); System.out.println("Deleted the queue."); deleteBucketAndAllContents(s3); System.out.println("Deleted the bucket."); } private static void deleteBucketAndAllContents(AmazonS3 client) { ObjectListing objectListing = client.listObjects(S3_BUCKET_NAME); while (true) { for (S3ObjectSummary objectSummary : objectListing .getObjectSummaries()) { client.deleteObject(S3_BUCKET_NAME, objectSummary.getKey()); } if (objectListing.isTruncated()) { objectListing = client.listNextBatchOfObjects(objectListing); } else { break; } } final VersionListing list = client.listVersions( new ListVersionsRequest().withBucketName(S3_BUCKET_NAME)); for (S3VersionSummary s : list.getVersionSummaries()) { client.deleteVersion(S3_BUCKET_NAME, s.getKey(), s.getVersionId()); } client.deleteBucket(S3_BUCKET_NAME); } }