Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan AWS klien HTTP berbasis CRT
Klien HTTP AWS berbasis CRT termasuk sinkron dan asinkron. AwsCrtHttpClientAwsCrtAsyncHttpClient Klien HTTP AWS berbasis CRT memberikan manfaat klien HTTP berikut:
       
       
       
       
       
   - 
         Waktu startup SDK lebih cepat 
- 
         Jejak memori yang lebih kecil 
- 
         Mengurangi waktu latensi 
- 
         Manajemen kesehatan koneksi 
- 
         Penyeimbangan beban DNS 
 AWS Komponen berbasis CRT di SDK
Klien HTTP AWS  berbasis CRT, dijelaskan dalam topik ini, dan klien S3 AWS  berbasis CRT adalah komponen yang berbeda dalam SDK. 
Klien HTTP AWS berbasis CRT sinkron dan asinkron adalah implementasi antarmuka klien HTTP SDK dan digunakan untuk komunikasi HTTP umum. Mereka adalah alternatif untuk klien HTTP sinkron atau asinkron lainnya di SDK dengan manfaat tambahan.
Klien S3 AWS berbasis CRT adalah implementasi AsyncClient antarmuka S3 dan digunakan untuk bekerja dengan layanan Amazon S3. Ini adalah alternatif untuk implementasi S3AsyncClient antarmuka berbasis Java dan menawarkan beberapa keuntungan.
Meskipun kedua komponen menggunakan pustaka dari AWS Common Runtime, klien HTTP AWS berbasis CRT tidak menggunakan pustaka aws-c-s 3 dan tidak mendukung fitur API unggahan multipart S3. Klien S3 AWS berbasis CRT, sebaliknya, dibuat khusus untuk mendukung fitur API unggahan multibagian S3.
      Akses klien HTTP AWS berbasis CRT
      Sebelum Anda dapat menggunakan klien HTTP AWS berbasis CRT, tambahkan aws-crt-client artefak dengan versi minimum 2.22.0 ke dependensi proyek Anda.
      Gunakan salah satu opsi berikut untuk mengatur file Maven pom.xml Anda.
       Anda dapat memilih untuk menggunakan opsi jar khusus Platform jika Anda perlu menjaga ukuran dependensi runtime lebih kecil, misalnya jika aplikasi Anda berjalan dalam suatu fungsi. AWS Lambda 
         - Uber-jar option
- 
               Secara default, aws-crt-clientmenggunakan uber-jar artefak AWS CRT yang berisi binari untuk beberapa platform, termasuk Linux, Windows, dan 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>
 * Ganti versi yang ditampilkan dalam warna merah dengan versi Java SDK yang ingin Anda gunakan. Temukan yang terbaru di Maven Central. 
- Platform-specific jar option
- 
               Untuk membatasi runtime Java ke versi khusus platform dari pustaka AWS CRT, buat perubahan berikut pada opsi Uber-jar. 
                   
                   
               - 
                     Tambahkan exclusionselemen keaws-crt-clientartefak SDK. Pengecualian ini mencegah SDK dari transitif menggunakan CRT uber-jar. AWS
 
- 
                     Tambahkan elemen ketergantungan untuk versi platform AWS CRT tertentu yang Anda butuhkan. Lihat Langkah-langkah untuk menentukan versi artefak AWS CRT di bawah ini untuk mengetahui bagaimana Anda dapat menentukan versi yang benar. 
 
 <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 Ganti versi yang ditampilkan dalam warna merah dengan versi Java SDK yang ingin Anda gunakan. Temukan yang terbaru di Maven Central. 2 Ganti versi software.amazon.awssdk.crt:aws-crtyang akan disediakan oleh opsi Uber-jar. Lihat Langkah-langkah berikut untuk menentukan versi artefak AWS CRT.
 3 Ganti classifiernilainya dengan satu untuk platform Anda. Lihat  GitHub  halaman AWS CRT untuk Java untuk daftar nilai yang tersedia.
 Langkah-langkah untuk menentukan versi artefak AWS CRTGunakan langkah-langkah berikut untuk menentukan versi artefak AWS CRT yang kompatibel dengan versi SDK for Java yang Anda gunakan. - 
                     Siapkan pom.xmlfile Anda seperti yang ditunjukkan pada opsi Uber-jar. Pengaturan ini memungkinkan Anda untuk melihat versi SDK apasoftware.amazon.awssdk.crt:aws-crtyang dibawa secara default.
 
- 
                     Di root proyek (dalam direktori yang sama dengan pom.xmlfile), jalankan perintah Maven berikut:
 mvn dependency:tree -Dincludes=software.amazon.awssdk.crt:aws-crt
 Maven mungkin melakukan tindakan lain, tetapi pada akhirnya Anda akan melihat keluaran konsol dari software.amazon.awssdk.crt:aws-crtketergantungan yang digunakan SDK secara transitif. Cuplikan berikut menunjukkan output sampel berdasarkan versi SDK: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
 
- 
                     Gunakan versi yang ditampilkan konsol untuk software.amazon.awssdk.crt:aws-crtartefak. Dalam hal ini, tambahkan0.31.3kepom.xmlfile Anda.
 
 
Gunakan dan konfigurasikan klien AWS HTTP berbasis CRT
      Anda dapat mengonfigurasi klien HTTP AWS berbasis CRT bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan. 
      Dengan salah satu pendekatan, Anda menggunakan pembangun untuk mengonfigurasi properti untuk instance klien HTTP AWS berbasis CRT.
       
         Praktik terbaik: mendedikasikan sebuah instance untuk klien layanan
         Jika Anda perlu mengonfigurasi instance klien HTTP AWS berbasis CRT, kami sarankan Anda mendedikasikan instance dengan membangunnya bersama dengan klien layanan. Anda dapat melakukannya dengan menggunakan httpClientBuilder metode pembangun klien layanan. Dengan cara ini, siklus hidup klien HTTP dikelola oleh SDK, yang membantu menghindari potensi kebocoran memori jika instance klien HTTP AWS berbasis CRT tidak ditutup ketika tidak lagi diperlukan.
         Contoh berikut membuat klien layanan S3 dan mengkonfigurasi klien HTTP AWS berbasis CRT dengan dan nilai-nilai. connectionTimeout maxConcurrency 
         
            - Synchronous client
- 
                  Impor import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
 Kode // 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
- 
                  Impor import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
 Kode // 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();
 
Pendekatan alternatif: bagikan contoh
         Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi klien HTTP AWS berbasis CRT dan membagikannya di beberapa klien layanan. Kumpulan koneksi HTTP akan dibagikan, yang menurunkan penggunaan sumber daya.
         Ketika instance klien HTTP AWS berbasis CRT dibagikan, Anda harus menutupnya ketika sudah siap untuk dibuang. SDK tidak akan menutup instance saat klien layanan ditutup.
Contoh berikut mengkonfigurasi instance klien HTTP AWS berbasis CRT dengan connectionTimeout dan nilai-nilai. maxConcurrency Instance yang dikonfigurasi diteruskan ke httpClient metode setiap pembuat klien layanan. Ketika klien layanan dan klien HTTP tidak lagi diperlukan, mereka secara eksplisit ditutup. Klien HTTP ditutup terakhir.
         
            - Synchronous client
- 
                  Impor 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;
 Kode // 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
- 
                  Impor 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;
 Kode // 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.
 
Tetapkan klien HTTP AWS berbasis CRT sebagai default
      Anda dapat mengatur file build Maven agar SDK menggunakan klien HTTP AWS berbasis CRT sebagai klien HTTP default untuk klien layanan.
      Anda melakukan ini dengan menambahkan exclusions elemen dengan dependensi klien HTTP default ke setiap artefak klien layanan.
      Dalam pom.xml contoh berikut, SDK menggunakan klien HTTP AWS berbasis CRT untuk layanan S3. Jika klien layanan dalam kode Anda adalahS3AsyncClient, SDK akan menggunakanAwsCrtAsyncHttpClient. Jika klien layanan adalah S3Client, SDK menggunakan. AwsCrtHttpClient Dengan pengaturan ini, klien HTTP asinkron berbasis Netty default dan HTTP sinkron berbasis Apache default tidak tersedia.
      <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>
      Kunjungi repositori pusat Maven untuk nilai terbaru. VERSION
      Jika beberapa klien layanan dideklarasikan dalam sebuah pom.xml file, semua memerlukan elemen exclusions XHTML.
Menggunakan properti sistem Java
         Untuk menggunakan klien HTTP AWS berbasis CRT sebagai HTTP default untuk aplikasi Anda, Anda dapat mengatur properti sistem Java software.amazon.awssdk.http.async.service.impl ke nilai. software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
         Untuk mengatur selama startup aplikasi, jalankan perintah yang mirip dengan berikut ini.
         java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\
software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
         Gunakan cuplikan kode berikut untuk mengatur properti sistem dalam kode aplikasi Anda.
         System.setProperty("software.amazon.awssdk.http.async.service.impl",
"software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
         Anda perlu menambahkan ketergantungan pada aws-crt-client artefak dalam poml.xml file Anda ketika Anda menggunakan properti sistem untuk mengkonfigurasi penggunaan klien HTTP berbasis AWS CRT.
Konfigurasi lanjutan dari klien AWS HTTP berbasis CRT
      Anda dapat menggunakan berbagai pengaturan konfigurasi klien HTTP AWS berbasis CRT, termasuk konfigurasi kesehatan koneksi dan waktu idle maksimum. Anda dapat meninjau opsi konfigurasi yang tersedia untukAwsCrtAsyncHttpClient. Anda dapat mengonfigurasi opsi yang sama untuk fileAwsCrtHttpClient.
       
         Konfigurasi kesehatan koneksi
         Anda dapat mengonfigurasi konfigurasi kesehatan koneksi untuk klien HTTP AWS berbasis CRT dengan menggunakan connectionHealthConfiguration metode pada pembuat klien HTTP. 
         Contoh berikut membuat klien layanan S3 yang menggunakan instance klien HTTP AWS berbasis CRT yang dikonfigurasi dengan konfigurasi kesehatan koneksi dan waktu idle maksimum untuk koneksi. 
         
            - Synchronous client
- 
                  Impor import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
 Kode // 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
- 
                  Impor import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
 Kode // 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();
 
Dukungan HTTP/2
      Protokol HTTP/2 belum didukung di klien HTTP AWS berbasis CRT, tetapi direncanakan untuk rilis future. 
      Sementara itu, jika Anda menggunakan klien layanan yang memerlukan dukungan HTTP/2 seperti KinesisAsyncClientatau TranscribeStreamingAsyncClient, pertimbangkan untuk menggunakan sebagai gantinya. NettyNioAsyncHttpClient 
    
      Contoh konfigurasi proxy
      Cuplikan kode berikut menunjukkan penggunaan ProxyConfiguration.Builderyang Anda gunakan untuk mengkonfigurasi pengaturan proxy dalam kode.
      
         - Synchronous client
- 
               Impor import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
 Kode 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
- 
               Impor import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
 Kode 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();
 
Properti sistem Java yang setara untuk konfigurasi proxy ditampilkan dalam cuplikan baris perintah berikut.
      $ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \
-Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
      Untuk menggunakan salah satu properti sistem proxy HTTPS, scheme properti harus disetel dalam kodehttps. Jika properti skema tidak disetel dalam kode, skema default ke HTTP dan SDK hanya mencari properti sistem. http.*
Pengaturan setara yang menggunakan variabel lingkungan adalah:
      // 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