Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klien berbasis Netty HTTP
HTTPKlien default untuk operasi asinkron di AWS SDK for Java 2.x adalah berbasis Netty. NettyNioAsyncHttpClient
Sebagai HTTP klien alternatif, Anda dapat menggunakan HTTPklien AWS CRT berbasis baru. Topik ini menunjukkan cara mengkonfigurasi fileNettyNioAsyncHttpClient
.
Akses NettyNioAsyncHttpClient
Dalam kebanyakan situasi, Anda menggunakan NettyNioAsyncHttpClient
tanpa konfigurasi eksplisit dalam program asinkron. Anda mendeklarasikan klien layanan asinkron Anda dan SDK akan mengkonfigurasi NettyNioAsyncHttpClient
dengan nilai standar untuk Anda.
Jika Anda ingin mengkonfigurasi NettyNioAsyncHttpClient
atau menggunakannya secara eksplisit dengan beberapa klien layanan, Anda harus membuatnya tersedia untuk konfigurasi.
Tidak diperlukan konfigurasi
Ketika Anda mendeklarasikan ketergantungan pada klien layanan di Maven, SDK menambahkan ketergantungan runtime pada artefak. netty-nio-client
Ini membuat NettyNioAsyncHttpClient
kelas tersedia untuk kode Anda saat runtime, tetapi tidak pada waktu kompilasi. Jika Anda tidak mengonfigurasi HTTP klien berbasis Netty, Anda tidak perlu menentukan ketergantungan untuk itu.
Dalam XML cuplikan pom.xml
file Maven berikut, ketergantungan yang dideklarasikan dengan secara <artifactId>dynamodb-enhanced</artifactId>
transitif membawa klien berbasis Netty. HTTP Anda tidak perlu mendeklarasikan ketergantungan khusus untuk itu.
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb-enhanced</artifactId> </dependency> </dependencies>
Dengan dependensi ini, Anda tidak dapat membuat perubahan HTTP konfigurasi apa pun, karena NettyNioAsyncHttpClient
pustaka hanya ada di classpath runtime.
Konfigurasi diperlukan
Untuk mengkonfigurasiNettyNioAsyncHttpClient
, Anda perlu menambahkan ketergantungan pada netty-nio-client
artefak pada waktu kompilasi.
Lihat contoh berikut dari file Maven untuk mengkonfigurasi pom.xml
file. NettyNioAsyncHttpClient
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb-enhanced</artifactId> </dependency> <!-- By adding the netty-nio-client dependency, NettyNioAsyncHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </dependency> </dependencies>
Gunakan dan konfigurasikan NettyNioAsyncHttpClient
Anda dapat mengonfigurasi instance NettyNioAsyncHttpClient
bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan.
Dengan salah satu pendekatan, Anda menggunakan NettyNioAsyncHttpClient.Builder
Praktik terbaik: mendedikasikan NettyNioAsyncHttpClient
instance untuk klien layanan
Jika Anda perlu mengonfigurasi instanceNettyNioAsyncHttpClient
, sebaiknya Anda membuat NettyNioAsyncHttpClient
instance khusus. Anda dapat melakukannya dengan menggunakan httpClientBuilder
metode pembangun klien layanan. Dengan cara ini, siklus hidup HTTP klien dikelola olehSDK, yang membantu menghindari potensi kebocoran memori jika NettyNioAsyncHttpClient
instance tidak ditutup saat tidak lagi diperlukan.
Contoh berikut menciptakan sebuah DynamoDbAsyncClient
instance yang digunakan oleh sebuah DynamoDbEnhancedAsyncClient
instance. DynamoDbAsyncClient
Instance berisi NettyNioAsyncHttpClient
instance dengan connectionTimeout
dan maxConcurrency
nilai-nilai. HTTPInstance dibuat menggunakan httpClientBuilder
metodeDynamoDbAsyncClient.Builder
.
Impor
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient; import software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension; import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; import java.time.Duration;
Kode
// DynamoDbAsyncClient is the lower-level client used by the enhanced client. DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient .builder() .httpClientBuilder(NettyNioAsyncHttpClient.builder() .connectionTimeout(Duration.ofMillis(5_000)) .maxConcurrency(100) .tlsNegotiationTimeout(Duration.ofMillis(3_500))) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Singleton: Use dynamoDbAsyncClient and enhancedClient for all requests. DynamoDbEnhancedAsyncClient enhancedClient = DynamoDbEnhancedAsyncClient .builder() .dynamoDbClient(dynamoDbAsyncClient) .extensions(AutoGeneratedTimestampRecordExtension.create()) .build(); // Perform work with the dynamoDbAsyncClient and enhancedClient. // Requests completed: Close dynamoDbAsyncClient. dynamoDbAsyncClient.close();
Pendekatan alternatif: bagikan NettyNioAsyncHttpClient
contoh
Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi NettyNioAsyncHttpClient
dan membagikannya di beberapa klien layanan. Kumpulan HTTP koneksi akan dibagikan, yang menurunkan penggunaan sumber daya.
catatan
Ketika sebuah NettyNioAsyncHttpClient
instance dibagikan, Anda harus menutupnya ketika sudah siap untuk dibuang. Itu tidak SDK akan menutup instance ketika klien layanan ditutup.
Contoh berikut mengkonfigurasi HTTP klien berbasis Netty yang digunakan oleh dua klien layanan. NettyNioAsyncHttpClient
Instance yang dikonfigurasi diteruskan ke httpClient
metode masing-masing builder. Ketika klien layanan dan klien tidak lagi diperlukan, kode secara eksplisit menutupnya. HTTP Kode menutup HTTP klien terakhir.
Impor
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;
Kode
// Create a NettyNioAsyncHttpClient shared instance. SdkAsyncHttpClient nettyHttpClient = NettyNioAsyncHttpClient.builder().maxConcurrency(100).build(); // Singletons: Use the s3AsyncClient, dbAsyncClient, and enhancedAsyncClient for all requests. S3AsyncClient s3AsyncClient = S3AsyncClient.builder() .httpClient(nettyHttpClient) .build(); DynamoDbAsyncClient dbAsyncClient = DynamoDbAsyncClient.builder() .httpClient(nettyHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbEnhancedAsyncClient enhancedAsyncClient = DynamoDbEnhancedAsyncClient.builder() .dynamoDbClient(dbAsyncClient) .extensions(AutoGeneratedTimestampRecordExtension.create()) .build(); // Perform work with s3AsyncClient, dbAsyncClient, and enhancedAsyncClient. // Requests completed: Close all service clients. s3AsyncClient.close(); dbAsyncClient.close() nettyHttpClient.close(); // Explicitly close nettyHttpClient.
Contoh konfigurasi proxy
Cuplikan kode berikut menggunakan pembangun konfigurasi proxy untuk klien HTTP Netty
SdkAsyncHttpClient nettyHttpClient = NettyNioAsyncHttpClient.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 HTTPS proxy, scheme
properti harus diatur dalam kode kehttps
. Jika properti skema tidak diatur dalam kode, skema default ke HTTP dan hanya SDK terlihat untuk 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 nettyHttpClient = NettyNioAsyncHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App