

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à.

# Configurazione AWS dei client HTTP basati su CRT
<a name="http-configuration-crt"></a>

I client HTTP AWS basati su CRT includono quelli sincroni e asincroni. [AwsCrtHttpClient[AwsCrtAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.html)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.html) I client HTTP AWS basati su CRT offrono i seguenti vantaggi del client HTTP:
+ Tempo di avvio del’SDK più rapido
+ Ingombro di memoria minore
+ Tempo di latenza ridotto
+ Gestione dell’integrità delle connessioni
+ Bilanciamento del carico DNS

**AWS Componenti basati su CRT nell'SDK**

I client *HTTP AWS * basati su CRT, descritti in questo argomento, e il client *S3 AWS basato su CRT sono componenti diversi dell'SDK*. 

I client HTTP sincroni e asincroni **AWS basati su CRT sono interfacce client HTTP SDK di implementazione e vengono utilizzati per comunicazioni HTTP** generali. Sono alternative agli altri client HTTP sincroni o asincroni dell'SDK con vantaggi aggiuntivi.

Il **[client S3 AWS basato su CRT](crt-based-s3-client.md)** è un'implementazione dell'AsyncClientinterfaccia [S3](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html) e viene utilizzato per lavorare con il servizio Amazon S3. È un'alternativa all'implementazione dell'interfaccia basata su Java e offre diversi vantaggi. `S3AsyncClient`

Sebbene entrambi i componenti utilizzino librerie del [AWS Common Runtime](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html), i client HTTP AWS basati su CRT non utilizzano la [libreria aws-c-s 3](https://github.com/awslabs/aws-c-s3) e non supportano le funzionalità dell'API di caricamento multipart di [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html). Il client S3 AWS basato su CRT, invece, è stato creato appositamente per supportare le funzionalità dell'API di caricamento multiparte di S3.

## Accedi AWS ai client HTTP basati su CRT
<a name="http-config-crt-access"></a>

Prima di poter utilizzare i client HTTP AWS basati su CRT, aggiungete l'`aws-crt-client`artefatto con una versione minima di 2.22.0 alle dipendenze del progetto.

Usa una delle seguenti opzioni per configurare il tuo file Maven. `pom.xml`

**Nota**  
 È possibile scegliere di utilizzare l'*opzione jar specifica della piattaforma* se è necessario ridurre le dimensioni delle dipendenze di runtime, ad esempio se l'applicazione viene eseguita in una funzione. AWS Lambda 

------
#### [ Uber-jar option ]

Per impostazione predefinita, `aws-crt-client` utilizza un uber-jar di artefatti AWS CRT che contiene file binari per diverse piattaforme, tra cui Linux, Windows e macOS.

```
<project>
   <properties>
     <aws.sdk.java.version>2.29.10*</aws.sdk.java.version>
  </properties>
  <dependencyManagement>
   <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${aws.sdk.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
   </dependencies>
  </dependencyManagement>
  <dependencies>
   <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>aws-crt-client</artifactId>
   </dependency>
  </dependencies>
</project>
```

\$1Sostituisci la versione mostrata in rosso con la versione di Java SDK che desideri utilizzare. Trova le ultime novità su [Maven](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) Central.

------
#### [ Platform-specific jar option ]

*Per limitare il runtime Java alla versione specifica della piattaforma della libreria AWS CRT, apporta le seguenti modifiche all'opzione Uber-JAR.*
+ Aggiungi un `exclusions` elemento all'artefatto dell'SDK. `aws-crt-client` Questa esclusione impedisce all'SDK di utilizzare transitivamente il CRT uber-jar. AWS 
+ Aggiungi un elemento di dipendenza per la versione specifica della piattaforma CRT di cui hai bisogno. AWS **Consultate i passaggi per determinare la versione dell'artefatto AWS CRT di seguito per sapere come determinare la versione** corretta.

```
<project>
   <properties>
     <aws.sdk.java.version>2.29.101</aws.sdk.java.version>
  </properties>
   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>${aws.sdk.java.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>aws-crt-client</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>software.amazon.awssdk.crt</groupId>
                    <artifactId>aws-crt</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>software.amazon.awssdk.crt</groupId>
            <artifactId>aws-crt</artifactId>
            <version>0.31.32</version>
            <classifier>linux-x86_643</classifier>
        </dependency>
    </dependencies>
```

1 Sostituisci la versione mostrata in rosso con la versione di Java SDK che desideri utilizzare. Trova le ultime novità su [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

2 Sostituisci la versione `software.amazon.awssdk.crt:aws-crt` che sarebbe fornita dall'opzione *Uber-JAR*. Vedi i seguenti **passaggi per determinare la versione dell'artefatto AWS CRT**.

3 Sostituisci il `classifier` valore con uno per la tua piattaforma. Fate riferimento alla GitHub pagina AWS CRT per Java per un [elenco dei valori disponibili](https://github.com/awslabs/aws-crt-java?tab=readme-ov-file#platform-specific-jars).

**Passaggi per determinare la versione dell' AWS artefatto CRT**

Utilizzate i seguenti passaggi per determinare la versione dell'artefatto AWS CRT compatibile con la versione dell'SDK for Java in uso.

1. *Configura il `pom.xml` file come mostrato nell'opzione Uber-JAR.* Questa configurazione ti consente di vedere quale versione dell'SDK `software.amazon.awssdk.crt:aws-crt` è disponibile per impostazione predefinita.

1. Alla radice del progetto (nella stessa directory del `pom.xml` file), esegui il seguente comando Maven:

   ```
   mvn dependency:tree -Dincludes=software.amazon.awssdk.crt:aws-crt
   ```

   Maven potrebbe eseguire altre azioni, ma alla fine dovresti vedere l'output della console della `software.amazon.awssdk.crt:aws-crt` dipendenza utilizzata dall'SDK in modo transitivo. Il seguente frammento mostra un output di esempio basato su una versione SDK di: `2.29.10`

   ```
   [INFO] org.example:yourProject:jar:1.0-SNAPSHOT
   [INFO] \- software.amazon.awssdk:aws-crt-client:jar:2.29.10:compile
   [INFO]    \- software.amazon.awssdk.crt:aws-crt:jar:0.31.3:compile
   ```

1. Usa la versione mostrata dalla console per l'artefatto. `software.amazon.awssdk.crt:aws-crt` In questo caso, aggiungilo `0.31.3` al tuo `pom.xml` file.

------

## Usa e configura un client HTTP AWS basato su CRT
<a name="http-crt-config"></a>

È possibile configurare un client HTTP AWS basato su CRT insieme alla creazione di un client di servizio oppure è possibile configurare una singola istanza da condividere tra più client di servizio. 

Con entrambi gli approcci, si utilizza un builder per [configurare le proprietà per l'istanza del client](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.Builder.html) HTTP basato su AWS CRT.

### Procedura consigliata: dedicare un'istanza a un client di servizio
<a name="http-config-crt-one-client"></a>

Se devi configurare un'istanza di un client HTTP AWS basato su CRT, ti consigliamo di dedicare l'istanza costruendola insieme al client di servizio. Puoi farlo utilizzando il `httpClientBuilder` metodo del builder del client del servizio. In questo modo, il ciclo di vita del client HTTP viene gestito dall'SDK, che aiuta a evitare potenziali perdite di memoria se l'istanza del client HTTP AWS basato su CRT non viene chiusa quando non è più necessaria.

L'esempio seguente crea un client di servizio S3 e configura un client HTTP basato su CRT con valori e. AWS `connectionTimeout` `maxConcurrency` 

------
#### [ Synchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

**Codice**

```
// Singleton: Use s3Client for all requests.
S3Client s3Client = S3Client.builder()
    .httpClientBuilder(AwsCrtHttpClient
        .builder()
        .connectionTimeout(Duration.ofSeconds(3))
        .maxConcurrency(100))
    .build();

// Perform work with the s3Client.

// Requests completed: Close the s3Client.
s3Client.close();
```

------
#### [ Asynchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
```

**Codice**

```
// Singleton: Use s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
    .httpClientBuilder(AwsCrtAsyncHttpClient
        .builder()
        .connectionTimeout(Duration.ofSeconds(3))
        .maxConcurrency(100))
    .build();

// Perform work with the s3AsyncClient.

// Requests completed: Close the s3AsyncClient.
s3AsyncClient.close();
```

------

### Approccio alternativo: condividi un'istanza
<a name="http-config-crt-multi-clients"></a>

Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurare un client HTTP AWS basato su CRT e condividerlo tra più client di servizio. Il pool di connessioni HTTP verrà condiviso, il che riduce l'utilizzo delle risorse.

**Nota**  
Quando un'istanza client HTTP AWS basata su CRT viene condivisa, è necessario chiuderla quando è pronta per essere eliminata. L'SDK non chiuderà l'istanza quando il client del servizio viene chiuso.

L'esempio seguente configura un'istanza client HTTP AWS basata su CRT con valori e. `connectionTimeout` `maxConcurrency` L'istanza configurata viene passata al `httpClient` metodo del builder di ogni client di servizio. Quando i client di servizio e il client HTTP non sono più necessari, vengono chiusi in modo esplicito. Il client HTTP viene chiuso per ultimo.

------
#### [ Synchronous client ]

**Importazioni**

```
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

**Codice**

```
// Create an AwsCrtHttpClient shared instance.
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
    .connectionTimeout(Duration.ofSeconds(3))
    .maxConcurrency(100)
    .build();

// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = S3Client.builder()
    .httpClient(crtHttpClient)
    .credentialsProvider(EnvironmentVariableCredentialsProvider.crea
    .defaultsMode(DefaultsMode.IN_REGION)
    .region(Region.US_EAST_1)
    .build();

DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
    .httpClient(crtHttpClient)
    .credentialsProvider(EnvironmentVariableCredentialsProvider.crea
    .defaultsMode(DefaultsMode.IN_REGION)
    .region(Region.US_EAST_1)
    .build();

// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
crtHttpClient.close();  // Explicitly close crtHttpClient.
```

------
#### [ Asynchronous client ]

**Importazioni**

```
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
```

**Codice**

```
// Create an AwsCrtAsyncHttpClient shared instance.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
    .connectionTimeout(Duration.ofSeconds(3))
    .maxConcurrency(100)
    .build();

// Singletons: Use the s3AsyncClient and dynamoDbAsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
    .httpClient(crtAsyncHttpClient)
    .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
    .defaultsMode(DefaultsMode.IN_REGION)
    .region(Region.US_EAST_1)
    .build();

DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient.builder()
    .httpClient(crtAsyncHttpClient)
    .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
    .defaultsMode(DefaultsMode.IN_REGION)
    .region(Region.US_EAST_1)
    .build();

// Requests completed: Close all service clients.
s3AsyncClient.close();
dynamoDbAsyncClient.close();
crtAsyncHttpClient.close();  // Explicitly close crtAsyncHttpClient.
```

------

## Imposta un client HTTP AWS basato su CRT come predefinito
<a name="setting-the-crt-based-http-client-as-the-default"></a>

Puoi configurare il tuo file di build Maven in modo che l'SDK utilizzi un client HTTP AWS basato su CRT come client HTTP predefinito per i client di servizio.

A tale scopo, è possibile aggiungere un `exclusions` elemento con le dipendenze del client HTTP predefinite a ciascun elemento del client di servizio.

Nell'`pom.xml`esempio seguente, l'SDK utilizza un client HTTP AWS basato su CRT per i servizi S3. Se il client di servizio nel codice è un`S3AsyncClient`, l'SDK lo utilizza. `AwsCrtAsyncHttpClient` Se il client di servizio è un S3Client, l'SDK utilizza. `AwsCrtHttpClient` Con questa configurazione il client HTTP asincrono predefinito basato su Netty e l'HTTP sincrono predefinito basato su Apache non sono disponibili.

```
<project>
   <properties>
     <aws.sdk.version>VERSION</aws.sdk.version>
  </properties>
  <dependencies>
   <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>s3</artifactId>
      <version>${aws.sdk.version}</version>
      <exclusions>
         <exclusion>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>netty-nio-client</artifactId>
         </exclusion>
         <exclusion>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>apache-client</artifactId>
         </exclusion>
      </exclusions>
   </dependency>
   <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>aws-crt-client</artifactId>
   </dependency>
  </dependencies>
</project>
```

Visita il repository centrale di Maven per le ultime novità. [https://central.sonatype.com/artifact/software.amazon.awssdk/bom](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

**Nota**  
Se più client di servizio sono dichiarati in un `pom.xml` file, tutti richiedono l'`exclusions`elemento XML.

### Utilizzate una proprietà di sistema Java
<a name="setting-via-java-system-property"></a>

Per utilizzare i client HTTP AWS basati su CRT come HTTP predefinito per l'applicazione, è possibile impostare la proprietà del sistema Java su un valore `software.amazon.awssdk.http.async.service.impl` di. `software.amazon.awssdk.http.crt.AwsCrtSdkHttpService`

Per impostarlo durante l'avvio dell'applicazione, eseguite un comando simile al seguente.

```
java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\
software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
```

Utilizzate il seguente frammento di codice per impostare la proprietà di sistema nel codice dell'applicazione.

```
System.setProperty("software.amazon.awssdk.http.async.service.impl",
"software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
```

**Nota**  
È necessario aggiungere una dipendenza dall'elemento nel `poml.xml` file quando si utilizza una proprietà di sistema per configurare l'uso dei client HTTP basati su `aws-crt-client` CRT. AWS 

## Configurazione avanzata dei client HTTP basati su CRT AWS
<a name="configuring-the-crt-based-http-client"></a>

È possibile utilizzare varie impostazioni di configurazione dei client HTTP AWS basati su CRT, tra cui la configurazione dello stato della connessione e il tempo massimo di inattività. È possibile esaminare le [opzioni di configurazione disponibili per.](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.Builder.html) `AwsCrtAsyncHttpClient` È possibile configurare le stesse opzioni per`AwsCrtHttpClient`.

### Configurazione dello stato della connessione
<a name="connection-health-checks"></a>

È possibile configurare la configurazione dello stato della connessione per i client HTTP AWS basati su CRT utilizzando il `connectionHealthConfiguration` metodo del generatore di client HTTP. 

L'esempio seguente crea un client di servizio S3 che utilizza un'istanza del client HTTP AWS basata su CRT configurata con la configurazione dello stato della connessione e un tempo di inattività massimo per le connessioni. 

------
#### [ Synchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

**Codice**

```
// Singleton: Use the s3Client for all requests.
S3Client s3Client = S3Client.builder()
    .httpClientBuilder(AwsCrtHttpClient
        .builder()
        .connectionHealthConfiguration(builder -> builder
            .minimumThroughputInBps(32000L)
            .minimumThroughputTimeout(Duration.ofSeconds(3)))
        .connectionMaxIdleTime(Duration.ofSeconds(5)))
    .build();

// Perform work with s3Client.

// Requests complete: Close the service client.
s3Client.close();
```

------
#### [ Asynchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
```

**Codice**

```
// Singleton: Use the s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
    .httpClientBuilder(AwsCrtAsyncHttpClient
        .builder()
        .connectionHealthConfiguration(builder -> builder
            .minimumThroughputInBps(32000L)
            .minimumThroughputTimeout(Duration.ofSeconds(3)))
        .connectionMaxIdleTime(Duration.ofSeconds(5)))
    .build();

// Perform work with s3AsyncClient.

// Requests complete: Close the service client.
s3AsyncClient.close();
```

------

## Supporto HTTP/2
<a name="limitation-the-crt-based-http-client"></a>

Il protocollo HTTP/2 non è ancora supportato nei client HTTP AWS basati su CRT, ma è previsto per una versione futura. 

Nel frattempo, se utilizzi client di servizio che richiedono il supporto HTTP/2 come the o the, considera di utilizzare invece il [KinesisAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kinesis/KinesisAsyncClient.html). [TranscribeStreamingAsyncClient[NettyNioAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/transcribestreaming/TranscribeStreamingAsyncClient.html) 

## Esempio di configurazione del proxy
<a name="http-config-crt-proxy-ex"></a>

Il seguente frammento di codice mostra l'uso di [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/ProxyConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/ProxyConfiguration.Builder.html)ciò che si utilizza per configurare l'impostazione del proxy nel codice.

------
#### [ Synchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
```

**Codice**

```
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
    .proxyConfiguration(ProxyConfiguration.builder()
        .scheme("https")
        .host("myproxy")
        .port(1234)
        .username("username")
        .password("password")
        .nonProxyHosts(Set.of("localhost", "host.example.com"))
        .build())
    .build();
```

------
#### [ Asynchronous client ]

**Importazioni**

```
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
```

**Codice**

```
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
    .proxyConfiguration(ProxyConfiguration.builder()
        .scheme("https")
        .host("myproxy")
        .port(1234)
        .username("username")
        .password("password")
        .nonProxyHosts(Set.of("localhost", "host.example.com"))
        .build())
    .build();
```

------

Le proprietà di sistema Java equivalenti per la configurazione del proxy sono mostrate nel seguente frammento di riga di comando.

```
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \
-Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
```

**Importante**  
Per utilizzare una qualsiasi delle proprietà del sistema proxy HTTPS, la `scheme` proprietà deve essere impostata nel codice su. `https` Se la proprietà scheme non è impostata nel codice, per impostazione predefinita lo schema è HTTP e l'SDK cerca `http.*` solo le proprietà di sistema.

La configurazione equivalente che utilizza le variabili di ambiente è:

```
// Set the following environment variables.
// $ export HTTPS_PROXY="https://username:password@myproxy:1234"
// $ export NO_PROXY="localhost|host.example.com"

// Set the 'useSystemPropertyValues' to false on the proxy configuration.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
    .proxyConfiguration(ProxyConfiguration.builder()
        .scheme("https")
        .useSystemPropertyValues(Boolean.FALSE)
        .build())
    .build();

// Run the application.
// $ java -cp ... App
```