Konfigurasikan klien berbasis Netty HTTP - 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 klien berbasis Netty HTTP

HTTPKlien default untuk operasi asinkron di AWS SDK for Java 2.x adalah berbasis Netty. NettyNioAsyncHttpClient Klien berbasis Netty didasarkan pada kerangka jaringan berbasis peristiwa asinkron dari proyek Netty.

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 untuk mengonfigurasi properti untuk instance klien berbasis NettyHTTP.

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. DynamoDbAsyncClientInstance 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. NettyNioAsyncHttpClientInstance 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