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
-
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 S3S3AsyncClient
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
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
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
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.
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 tersediaAwsCrtAsyncHttpClient
. 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.
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 KinesisAsyncClient
Contoh konfigurasi proxy
Cuplikan kode berikut menunjukkan penggunaan ProxyConfiguration.Builder
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