

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

# Amazon Simple Queue Service 작업
<a name="examples-sqs"></a>

이 단원에서는 AWS SDK for Java 2.x를 사용한 [Amazon Simple Queue Service](https://docs.aws.amazon.com/sqs/) 프로그래밍의 예제를 제공합니다.

다음 예제에는 각 기술을 보여주는 데 필요한 코드만 포함되어 있습니다. [전체 예제 코드는 GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2)에 있습니다. 이 위치에서 단일 소스 파일을 다운로드하거나 리포지토리를 로컬로 복사하여 모든 예제를 빌드하고 실행할 수 있습니다.

**Topics**
+ [자동 요청 배치 처리 사용](sqs-auto-batch.md)
+ [대기열 작업](examples-sqs-message-queues.md)
+ [메시지 작업](examples-sqs-messages.md)

# 에서 Amazon SQS에 자동 요청 일괄 처리 사용 AWS SDK for Java 2.x
<a name="sqs-auto-batch"></a>

Amazon SQS용 Automatic Request Batching API는 SQS 작업에 대한 요청을 배치 처리 및 버퍼링하는 효율적인 방법을 제공하는 개괄적인 라이브러리입니다. 배치 처리 API를 사용하면 SQS에 대한 요청 수를 줄여 처리량을 개선하고 비용을 최소화할 수 있습니다.

배치 API 메서드는 `[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)` 메서드(`sendMessage`, `changeMessageVisibility`, `deleteMessage`, `receiveMessage`)와 일치하므로 최소한의 변경 사항으로 배치 API를 드롭인 대체로 사용할 수 있습니다.

이 주제에서는 Amazon SQS용 Automatic Request Batching API를 구성하고 사용하는 방법에 대한 개요를 제공합니다.

## 사전 조건 확인
<a name="sqs-auto-batch-requirements"></a>

배치 처리 API에 액세스하려면 SDK for Java 2.x의 버전 *2.28.0 *이상을 사용해야 합니다. Maven `pom.xml`에는 최소한 다음 요소가 포함되어야 합니다.

```
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.28.231</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>sqs</artifactId>
    </dependency>
</dependencies>
```

1 [최신 버전](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

## 배치 관리자 만들기
<a name="sqs-auto-batch-create"></a>

자동 요청 배치 처리 API는 [SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html) 인터페이스에 따라 구현됩니다. 몇 가지 방법으로 관리자의 인스턴스를 만들 수 있습니다.

### `SqsAsyncClient`를 사용한 기본 구성
<a name="sqs-batch-manager-create-default"></a>

배치 관리자를 만드는 가장 간단한 방법은 기존 [SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html) 인스턴스에서 `batchManager` 팩토리 메서드를 직접적으로 호출하는 것입니다. 이 접근 방법은 다음 코드 조각에 나와 있습니다.

```
SqsAsyncClient asyncClient = SqsAsyncClient.create();
SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
```

이 접근 방식을 사용할 경우 `SqsAsyncBatchManager` 인스턴스는 [`SqsAsyncBatchManager`에 대한 구성 설정 재정의](#sqs-auto-batch-config-settings) 섹션의 표에 표시된 기본값을 사용합니다. 또한 `SqsAsyncBatchManager` 인스턴스는 만들어진 `SqsAsyncClient` 인스턴스의 `ExecutorService`를 사용합니다.

### `SqsAsyncBatchManager.Builder`를 사용한 사용자 지정 구성
<a name="sqs-batch-manager-create-custom"></a>

고급 사용 사례의 경우 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html)를 사용하여 배치 관리자를 사용자 지정할 수 있습니다. 이 접근 방식을 사용하여 `SqsAsyncBatchManager` 인스턴스를 만들면 배치 처리 동작을 미세 조정할 수 있습니다. 다음 코드 조각은 빌더를 사용하여 배치 처리 동작을 사용자 지정하는 방법의 예를 보여줍니다.

```
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder()
    .client(SqsAsyncClient.create())
    .scheduledExecutor(Executors.newScheduledThreadPool(5))
    .overrideConfiguration(b -> b
        .receiveMessageMinWaitDuration(Duration.ofSeconds(10))
        .receiveMessageVisibilityTimeout(Duration.ofSeconds(1))
        .receiveMessageAttributeNames(Collections.singletonList("*"))
        .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL)))
    .build();
```

이 접근 방식을 사용하면 [`SqsAsyncBatchManager`에 대한 구성 설정 재정의](#sqs-auto-batch-config-settings) 섹션의 표에 표시된 `BatchOverrideConfiguration` 객체의 설정을 조정할 수 있습니다. 이 접근 방식을 사용하여 배치 관리자에 사용자 지정 [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html)를 제공할 수도 있습니다.

## 메시지 전송
<a name="sqs-auto-batch-send"></a>

배치 관리자로 메시지를 보내려면 `[SqsAsyncBatchManager\$1sendMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#sendMessage(software.amazon.awssdk.services.sqs.model.SendMessageRequest))` 메서드를 사용합니다. SDK는 요청을 버퍼링하고 `maxBatchSize` 또는 `sendRequestFrequency` 값에 도달하면 요청을 배치로 보냅니다.

다음 예제에서는 다른 요청 바로 다음에 오는 `sendMessage` 요청을 보여줍니다. 이 경우 SDK는 두 메시지를 단일 배치로 전송합니다.

```
// Sending the first message
CompletableFuture<SendMessageResponse> futureOne = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue"));

// Sending the second message
CompletableFuture<SendMessageResponse> futureTwo = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue"));

// Waiting for both futures to complete and retrieving the responses
SendMessageResponse messageOne = futureOne.join();
SendMessageResponse messageTwo = futureTwo.join();
```

## 메시지 표시 제한 시간 변경
<a name="sqs-auto-batch-change-vis"></a>

[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)) 메서드를 사용하여 배치 단위로 메시지의 표시 제한 시간을 변경할 수 있습니다. SDK는 요청을 버퍼링하고 `maxBatchSize` 또는 `sendRequestFrequency` 값에 도달하면 요청을 배치로 보냅니다.

다음 예제에는 `changeMessageVisibility` 메서드를 직접적으로 호출하는 방법이 나와 있습니다.

```
CompletableFuture<ChangeMessageVisibilityResponse> futureOne =
    sqsAsyncBatchManager.changeMessageVisibility(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
ChangeMessageVisibilityResponse response = futureOne.join();
```

## 메시지 삭제
<a name="sqs-auto-batch-delete"></a>

[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)) 메서드를 사용하여 배치 단위로 메시지를 삭제할 수 있습니다. SDK는 요청을 버퍼링하고 `maxBatchSize` 또는 `sendRequestFrequency` 값에 도달하면 요청을 배치로 보냅니다.

다음 예제에서는 `deleteMessage` 메서드를 직접적으로 호출하는 방법을 보여줍니다.

```
CompletableFuture<DeleteMessageResponse> futureOne = 
    sqsAsyncBatchManager.deleteMessage(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
DeleteMessageResponse response = futureOne.join();
```

## 메시지 수신
<a name="sqs-auto-batch-receive"></a>

### 기본 설정 사용
<a name="sqs-auto-batch-receive-default-settings"></a>

애플리케이션에서 `[SqsAsyncBatchManager\$1receiveMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#receiveMessage(java.util.function.Consumer))` 메서드를 폴링하면 배치 관리자가 내부 버퍼에서 메시지를 가져와 SDK가 백그라운드에서 자동으로 업데이트됩니다.

다음 예제에는 `receiveMessage` 메서드를 직접적으로 호출하는 방법이 나와 있습니다.

```
CompletableFuture<ReceiveMessageResponse> responseFuture = 
    sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
```

### 사용자 지정 설정 사용
<a name="sqs-auto-batch-receive-custom-settings"></a>

예를 들어 사용자 지정 대기 시간을 설정하고 검색할 메시지 수를 지정하여 요청을 추가로 사용자 지정하려면 다음 예제와 같이 요청을 사용자 지정할 수 있습니다.

```
CompletableFuture<ReceiveMessageResponse> response = 
    sqsAsyncBatchManager.receiveMessage(r -> 
        r.queueUrl("queueUrl")
         .waitTimeSeconds(5)
         .visibilityTimeout(20));
```

**참고**  
다음 파라미터가 포함된 `[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)`를 사용하여 `receiveMessage`를 직접적으로 호출하면 SDK는 배치 관리자를 우회하고 일반 비동기식 `receiveMessage` 요청을 보냅니다.  
`messageAttributeNames`
`messageSystemAttributeNames`
`messageSystemAttributeNamesWithStrings`
`overrideConfiguration`

## `SqsAsyncBatchManager`에 대한 구성 설정 재정의
<a name="sqs-auto-batch-config-settings"></a>

`SqsAsyncBatchManager` 인스턴스를 만들 때 다음 설정을 조정할 수 있습니다. 다음 설정 목록을 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html)에서 사용할 수 있습니다.


| 설정 | 설명 | 기본값  | 
| --- | --- | --- | 
| maxBatchSize | 각 SendMessageBatchRequest, ChangeMessageVisibilityBatchRequest 또는 DeleteMessageBatchRequest에 대한 배치당 최대 요청 수입니다. 최대값은 10입니다. | 10 | 
| sendRequestFrequency |  배치를 보내기 전까지의 시간이며, `maxBatchSize`에 도달하면 앞서 전송됩니다. 값이 높을수록 요청이 줄어들지만 지연 시간은 늘어날 수 있습니다.  | 200ms | 
| receiveMessageVisibilityTimeout | 메시지에 대한 표시 제한 시간입니다. 설정되지 않으면 대기열의 기본값이 사용됩니다. | 대기열의 기본값 | 
| receiveMessageMinWaitDuration | receiveMessage 요청의 최소 대기 시간입니다. CPU 낭비를 방지하기 위해 0으로 설정하는 것은 피합니다. | 50ms | 
| receiveMessageSystemAttributeNames | receiveMessage 직접 호출을 요청할 [시스템 속성 이름](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/MessageSystemAttributeName.html) 목록입니다. | 없음 | 
| receiveMessageAttributeNames | receiveMessage 직접 호출을 요청할 [속성 이름](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes) 목록입니다. | 없음 | 

# Amazon Simple Queue Service 메시지 대기열 작업
<a name="examples-sqs-message-queues"></a>

*메시지 대기열*은 메시지를 안정적으로 보내는 데 사용되는 논리적 컨테이너입니다 Amazon Simple Queue Service. *표준*과 *선입선출*(FIFO), 이렇게 두 가지 유형의 대기열이 있습니다. 대기열과 이러한 유형 간의 차이에 대해 자세히 알아보려면 [Amazon Simple Queue Service 개발자 안내서](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)를 참조하세요.

이 주제에서는를 사용하여 Amazon Simple Queue Service 대기열의 URL을 생성, 나열, 삭제 및 가져오는 방법을 설명합니다 AWS SDK for Java.

다음 예제에서 사용되는 `sqsClient` 변수는 다음 코드 조각에서 만들 수 있습니다.

```
SqsClient sqsClient = SqsClient.create();
```

정적 `create()` 메서드를 사용하여 `SqsClient`를 만들면 SDK가 [기본 리전 공급자 체인](region-selection.md#default-region-provider-chain)을 사용하여 리전을 구성하고 [기본 자격 증명 공급자 체인](credentials-chain.md)을 사용하여 자격 증명을 구성합니다.

## 대기열 생성
<a name="sqs-create-queue"></a>

`SqsClient’s` `createQueue` 메서드를 사용하고 다음 코드 조각과 같이 대기열 파라미터를 설명하는 `[CreateQueueRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/CreateQueueRequest.html)` 객체를 제공합니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
            CreateQueueRequest createQueueRequest = CreateQueueRequest.builder()
                .queueName(queueName)
                .build();

            sqsClient.createQueue(createQueueRequest);
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L52)를 참조하십시오.

## 대기열 나열
<a name="sqs-list-queues"></a>

계정의 Amazon Simple Queue Service 대기열을 나열하려면 `[ListQueuesRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ListQueuesRequest.html)` 객체를 사용하여 `SqsClient’s` `listQueues` 메서드를 호출합니다.

파라미터를 사용하지 않는 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#listQueues()](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#listQueues()) 메서드 형식을 사용하면 서비스에서는 최대 1,000개의 대기열까지 *모든 대기열*을 반환합니다.

`[ListQueuesRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ListQueuesRequest.html)` 객체에 대기열 이름 접두사를 지정해 다음 코드와 같이 접두사와 일치하는 대기열만 결과로 표시되도록 제한할 수 있습니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
        String prefix = "que";

        try {
            ListQueuesRequest listQueuesRequest = ListQueuesRequest.builder().queueNamePrefix(prefix).build();
            ListQueuesResponse listQueuesResponse = sqsClient.listQueues(listQueuesRequest);

            for (String url : listQueuesResponse.queueUrls()) {
                System.out.println(url);
            }

        } catch (SqsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L79)를 참조하십시오.

## 대기열의 URL 가져오기
<a name="sqs-get-queue-url"></a>

다음 코드는 `[GetQueueUrlRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/GetQueueUrlRequest.html)` 객체로 `SqsClient’s` `getQueueUrl` 메서드를 직접적으로 호출하여 대기열의 URL을 가져오는 방법을 보여줍니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
            GetQueueUrlResponse getQueueUrlResponse =
                sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
            String queueUrl = getQueueUrlResponse.queueUrl();
            return queueUrl;
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/7486a1a092aa8e16a21698ef26f9d524fef62e55/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L70)를 참조하십시오.

## 대기열 삭제
<a name="sqs-delete-queue"></a>

대기열의 [URL](#sqs-get-queue-url)을 `[DeleteQueueRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/DeleteQueueRequest.html)` 객체에 제공합니다. 그런 다음, 다음 코드와 같이 `SqsClient’s` `deleteQueue` 메서드를 직접적으로 호출하여 대기열을 삭제합니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
    public static void deleteSQSQueue(SqsClient sqsClient, String queueName) {

        try {

            GetQueueUrlRequest getQueueRequest = GetQueueUrlRequest.builder()
                    .queueName(queueName)
                    .build();

            String queueUrl = sqsClient.getQueueUrl(getQueueRequest).queueUrl();

            DeleteQueueRequest deleteQueueRequest = DeleteQueueRequest.builder()
                    .queueUrl(queueUrl)
                    .build();

            sqsClient.deleteQueue(deleteQueueRequest);

        } catch (SqsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/6240df86c5f17eae1e23d1139d1435c7dc4b2a11/javav2/example_code/sqs/src/main/java/com/example/sqs/DeleteQueue.java#L48)를 참조하십시오.

## 추가 정보
<a name="more-information"></a>
+  Amazon Simple Queue Service API 참조의 [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html) 
+  Amazon Simple Queue Service API 참조의 [GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html) 
+  Amazon Simple Queue Service API 참조의 [ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html) 
+  Amazon Simple Queue Service API 참조의 [DeleteQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html) 

# Amazon Simple Queue Service 메시지 전송, 수신 및 삭제
<a name="examples-sqs-messages"></a>

메시지는 분산된 구성 요소가 송신 및 수신할 수 있는 데이터 조각입니다. 메시지는 항상 [SQS 대기열](examples-sqs-message-queues.md)을 사용하여 전달됩니다.

다음 예제에서 사용되는 `sqsClient` 변수는 다음 코드 조각에서 만들 수 있습니다.

```
SqsClient sqsClient = SqsClient.create();
```

정적 `create()` 메서드를 사용하여 `SqsClient`를 만들면 SDK가 [기본 리전 공급자 체인](region-selection.md#default-region-provider-chain)을 사용하여 리전을 구성하고 [기본 자격 증명 공급자 체인](credentials-chain.md)을 사용하여 자격 증명을 구성합니다.

## 메시지 전송
<a name="sqs-message-send"></a>

SqsClient 클라이언트 `sendMessage` 메서드를 호출하여 Amazon Simple Queue Service 대기열에 단일 메시지를 추가합니다. 대기열의 [URL](examples-sqs-message-queues.md#sqs-get-queue-url), 메시지 본문 및 선택적 지연 값(초 단위)이 포함된 [SendMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageRequest.html) 객체를 제공합니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
            sqsClient.sendMessage(SendMessageRequest.builder()
                .queueUrl(queueUrl)
                .messageBody("Hello world!")
                .delaySeconds(10)
                .build());

            sqsClient.sendMessage(sendMsgRequest);
```

## 한 번의 요청에 여러 메시지를 전송
<a name="sqs-messages-send-multiple"></a>

SqsClient의 `sendMessageBatch` 메서드를 사용하여 단일 요청에서 메시지를 2개 이상 전송합니다. 이 메서드는 전송할 메시지 목록과 대기열 URL이 포함된 [SendMessageBatchRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageBatchRequest.html)를 가져옵니다. (각 메시지는 [SendMessageBatchRequestEntry](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageBatchRequestEntry.html)임) 또 메시지의 지연 값을 설정해 특정 메시지 전송을 지연시킬 수 있습니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
            SendMessageBatchRequest sendMessageBatchRequest = SendMessageBatchRequest.builder()
                .queueUrl(queueUrl)
                .entries(SendMessageBatchRequestEntry.builder().id("id1").messageBody("Hello from msg 1").build(),
                        SendMessageBatchRequestEntry.builder().id("id2").messageBody("msg 2").delaySeconds(10).build())
                .build();
            sqsClient.sendMessageBatch(sendMessageBatchRequest);
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L133)를 참조하십시오.

## 메시지 검색
<a name="sqs-messages-receive"></a>

SqsClient의 `receiveMessage` 메서드를 호출하여 현재 대기열에 있는 메시지를 검색합니다. 이 메서드는 대기열 URL이 포함된 [ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)를 가져옵니다. 또 반환할 메시지의 최대 수를 지정할 수 있습니다. 메시지는 [Message](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/Message.html) 객체의 목록으로 반환됩니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
        try {
            ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
                .queueUrl(queueUrl)
                .maxNumberOfMessages(5)
                .build();
            List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest).messages();
            return messages;
        } catch (SqsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return null;
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L148)를 참조하십시오.

## 수신 후 메시지 삭제
<a name="sqs-messages-delete"></a>

메시지를 수신하고 콘텐츠를 처리한 후에는 메시지의 수신 핸들과 대기열 URL을 `SqsClient's` [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#deleteMessage(software.amazon.awssdk.services.sqs.model.DeleteMessageRequest)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#deleteMessage(software.amazon.awssdk.services.sqs.model.DeleteMessageRequest)) 메서드로 전송하여 대기열에서 메시지를 삭제합니다.

 **가져오기** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **코드** 

```
        try {
            for (Message message : messages) {
                DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder()
                        .queueUrl(queueUrl)
                        .receiptHandle(message.receiptHandle())
                        .build();
                sqsClient.deleteMessage(deleteMessageRequest);
            }
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L187)를 참조하십시오.

## 추가 정보
<a name="more-info"></a>
+  개발자 안내서의 Amazon Simple Queue Service [Amazon Simple Queue Service 대기열 작동 방식](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html) 
+  Amazon Simple Queue Service API 참조의 [SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 
+  Amazon Simple Queue Service API 참조의 [SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html) 
+  Amazon Simple Queue Service API 참조의 [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) 
+  Amazon Simple Queue Service API 참조의 [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html) 