

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizza il batching automatico delle richieste per Amazon SQS con AWS SDK for Java 2.x
<a name="sqs-auto-batch"></a>

L'API Automatic Request Batching per Amazon SQS è una libreria di alto livello che fornisce un modo efficiente per creare batch e bufferizzare le richieste per le operazioni SQS. Utilizzando l'API di batching, riduci il numero di richieste a SQS, il che migliora la produttività e minimizza i costi. 

Poiché i metodi dell'API batch corrispondono ai `[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)` metodi—`sendMessage`,, `changeMessageVisibility``deleteMessage`, `receiveMessage` —puoi utilizzare l'API batch come sostituto immediato con modifiche minime. 

Questo argomento offre una panoramica su come configurare e utilizzare l'API Automatic Request Batching per Amazon SQS.

## Verifica i prerequisiti
<a name="sqs-auto-batch-requirements"></a>

È necessario utilizzare la versione *2.28.0* o successiva dell'SDK for Java 2.x per avere accesso all'API di batch. Il tuo Maven `pom.xml` dovrebbe contenere almeno i seguenti elementi.

```
<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 Ultima versione](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

## Crea un gestore di batch
<a name="sqs-auto-batch-create"></a>

L'API di raggruppamento automatico delle richieste è implementata dall'[SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html)interfaccia. È possibile creare un'istanza del gestore in due modi.

### Configurazione predefinita utilizzando `SqsAsyncClient`
<a name="sqs-batch-manager-create-default"></a>

Il modo più semplice per creare un gestore di batch consiste nel chiamare il metodo `batchManager` factory su un'[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)istanza esistente. L'approccio semplice è illustrato nel frammento seguente. 

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

Quando utilizzate questo approccio, l'`SqsAsyncBatchManager`istanza utilizza i valori predefiniti mostrati nella tabella della sezione. [Sostituisci le impostazioni di configurazione per `SqsAsyncBatchManager`](#sqs-auto-batch-config-settings) Inoltre, l'`SqsAsyncBatchManager`istanza utilizza `ExecutorService` l'`SqsAsyncClient`istanza da cui è stata creata.

### Configurazione personalizzata utilizzando `SqsAsyncBatchManager.Builder`
<a name="sqs-batch-manager-create-custom"></a>

Per casi d'uso più avanzati, è possibile personalizzare il gestore batch utilizzando [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). Utilizzando questo approccio per creare un'`SqsAsyncBatchManager`istanza, è possibile ottimizzare il comportamento di batch. Il seguente frammento mostra un esempio di come utilizzare il builder per personalizzare il comportamento del batch.

```
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();
```

Quando utilizzate questo approccio, potete regolare le impostazioni sull'`BatchOverrideConfiguration`oggetto mostrate nella tabella della sezione. [Sostituisci le impostazioni di configurazione per `SqsAsyncBatchManager`](#sqs-auto-batch-config-settings) È inoltre possibile fornire una personalizzazione [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)per il gestore dei batch utilizzando questo approccio.

## Inviare messaggi
<a name="sqs-auto-batch-send"></a>

Per inviare messaggi con il gestore batch, usa il `[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))` metodo. L'SDK memorizza le richieste e le invia come batch quando vengono raggiunti `sendRequestFrequency` i valori `maxBatchSize` or.

L'esempio seguente mostra una `sendMessage` richiesta immediatamente successiva a un'altra richiesta. In questo caso, l'SDK invia entrambi i messaggi in un unico batch.

```
// 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();
```

## Modifica il timeout di visibilità dei messaggi
<a name="sqs-auto-batch-change-vis"></a>

È possibile modificare il timeout di visibilità dei messaggi in un batch utilizzando il [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))metodo. L'SDK memorizza le richieste nel buffer e le invia in batch quando vengono raggiunti `sendRequestFrequency` i valori `maxBatchSize` or.

L'esempio seguente mostra come chiamare il `changeMessageVisibility` metodo.

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

## Eliminare i messaggi
<a name="sqs-auto-batch-delete"></a>

È possibile eliminare i messaggi in batch utilizzando il [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))metodo. L'SDK memorizza le richieste nel buffer e le invia come batch quando vengono raggiunti `sendRequestFrequency` i valori `maxBatchSize` or.

L'esempio seguente mostra come chiamare il `deleteMessage` metodo.

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

## Ricevere messaggi
<a name="sqs-auto-batch-receive"></a>

### Usa le impostazioni predefinite
<a name="sqs-auto-batch-receive-default-settings"></a>

Quando esegui il polling del `[SqsAsyncBatchManager\$1receiveMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#receiveMessage(java.util.function.Consumer))` metodo nell'applicazione, il gestore batch recupera i messaggi dal suo buffer interno, che l'SDK aggiorna automaticamente in background.

L'esempio seguente mostra come chiamare il metodo. `receiveMessage`

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

### Usa impostazioni personalizzate
<a name="sqs-auto-batch-receive-custom-settings"></a>

Se desideri personalizzare ulteriormente la richiesta, ad esempio impostando tempi di attesa personalizzati e specificando il numero di messaggi da recuperare, puoi personalizzare la richiesta come mostrato nell'esempio seguente.

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

**Nota**  
Se chiami `receiveMessage` con un `[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)` che include uno dei seguenti parametri, l'SDK ignora il gestore batch e invia una normale richiesta asincrona: `receiveMessage`  
`messageAttributeNames`
`messageSystemAttributeNames`
`messageSystemAttributeNamesWithStrings`
`overrideConfiguration`

## Sostituisci le impostazioni di configurazione per `SqsAsyncBatchManager`
<a name="sqs-auto-batch-config-settings"></a>

È possibile modificare le seguenti impostazioni quando si crea un'`SqsAsyncBatchManager`istanza. Il seguente elenco di impostazioni è disponibile in [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).


| Impostazione | Description | Valore predefinito | 
| --- | --- | --- | 
| maxBatchSize | Numero massimo di richieste per batch per ciascuna SendMessageBatchRequestChangeMessageVisibilityBatchRequest, oDeleteMessageBatchRequest. Il valore massimo è 10. | 10 | 
| sendRequestFrequency |  Tempo prima dell'invio di un batch, a meno che non `maxBatchSize` venga raggiunto prima. Valori più alti possono ridurre le richieste ma aumentare la latenza.  | 200 ms | 
| receiveMessageVisibilityTimeout | Timeout di visibilità per i messaggi. Se non è impostato, viene utilizzato il valore predefinito della coda. | L'impostazione predefinita della coda | 
| receiveMessageMinWaitDuration | Tempo di attesa minimo per le receiveMessage richieste. Evita di impostarlo su 0 per evitare sprechi di CPU. | 50 ms | 
| receiveMessageSystemAttributeNames | Elenco dei [nomi degli attributi di sistema](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/MessageSystemAttributeName.html) da richiedere per receiveMessage le chiamate. | Nessuno | 
| receiveMessageAttributeNames | Elenco dei [nomi degli attributi](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes) da richiedere per receiveMessage le chiamate. | Nessuno | 