Konfigurasikan AWS klien HTTP berbasis CRT - AWS SDK for Java 2.x

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.

Maven berikut pom.xml menunjukkan klien HTTP AWS berbasis CRT yang dideklarasikan menggunakan mekanisme bill of materials (BOM).

<project> <properties> <aws.sdk.version>2.22.0</aws.sdk.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>

Kunjungi repositori pusat Maven untuk versi terbaru.

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.

catatan

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 VERSION terbaru.

catatan

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");
catatan

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
penting

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