本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HTTP客户
您可以更改用于服务HTTP客户端的客户端,也可以使用更改HTTP客户机的默认配置 AWS SDK for Java 2.x。本节讨论的HTTP客户端和设置SDK。
HTTP适用于 Java SDK 的客户端
同步客户端
SDK适用于 Java 的同步HTTP客户端实现了该SdkHttpClientS3Client
或)需要使用同步HTTP客户端。DynamoDbClient
AWS SDK for Java 提供了三个同步HTTP客户端。
- ApacheHttpClient (默认)
-
ApacheHttpClient
是同步服务HTTP客户端的默认客户端。有关配置 ApacheHttpClient
的信息,请参阅配置基于 Apache HTTP 的客户端。 - AwsCrtHttpClient
-
AwsCrtHttpClient
提供高吞吐量和无阻塞 IO。它建立在 AWS 通用运行时 (CRT) Http 客户端之上。有关配置 AwsCrtHttpClient
并将其用于服务客户端的信息,请参阅AWS CRT基于配置的HTTP客户端。 - UrlConnectionHttpClient
-
要最大限度地减少应用程序使用的 jar 和第三方库的数量,可以使用。UrlConnectionHttpClient
有关配置 UrlConnectionHttpClient
的信息,请参阅配置URLConnection基于的HTTP客户端。
异步客户端
SDK适用于 Java 的异步HTTP客户端实现了该SdkAsyncHttpClientS3AsyncClient
或)需要使用异步HTTP客户端。DynamoDbAsyncClient
AWS SDK for Java 提供了两个异步HTTP客户端。
- NettyNioAsyncHttpClient (默认)
-
NettyNioAsyncHttpClient
是异步HTTP客户端使用的默认客户端。有关配置 NettyNioAsyncHttpClient
的信息,请参阅配置基于 Netty 的客户端 HTTP。 - AwsCrtAsyncHttpClient
-
AwsCrtAsyncHttpClient
基于 AWS 通用运行时 (CRT) HTTP 客户端。有关配置 AwsCrtAsyncHttpClient
的信息,请参阅AWS CRT基于配置的HTTP客户端。
HTTP客户推荐
选择HTTP客户端实现时,有几个因素会起作用。以下信息可帮助您做出决定。
建议流程图
以下流程图提供了一般指导,可帮助您确定要使用哪个HTTP客户端。
HTTP客户比较
下表提供了每个HTTP客户端的详细信息。
HTTP客户 | 同步还是异步 | 何时使用 | 限制/缺点 |
---|---|---|---|
基于 Apache 的客户端 HTTP (默认同步HTTP客户端) |
同步 | 如果您更需要低延迟而不是高吞吐量,请使用它 | 与其他HTTP客户端相比,启动时间较慢 |
URLConnection基于的HTTP客户端 | 同步 | 如果您对限制第三方依赖项有硬性要求,请使用它 | 不支持该HTTPPATCH方法,这是某些操作所必需的,APIS例如 Amazon APIGateway Update 操作 |
AWS CRT基于同步的HTTP客户端 1 | 同步 |
• 如果您的应用程序正在中运行,请使用它 AWS Lambda • 如果您更需要高吞吐量而不是低延迟,请使用它 • 如果您更喜欢同步SDK客户端,请使用它 |
不支持以下 Java 系统属性:
|
基于 Netty 的客户端 HTTP (默认异步HTTP客户端) |
异步 |
• 如果您的应用程序调用需要 HTTP /2 支持(例如 Kinesis)APIs,请使用它 API SubscribeToShard |
与其他HTTP客户端相比,启动时间较慢 |
AWS CRT基于异步HTTP客户端 1 | 异步 | • 如果您的应用程序在 AWS Lambda中运行,请使用它 • 如果您更需要高吞吐量而不是低延迟,请使用它 • 如果您更喜欢异步SDK客户端,请使用它 |
• 不支持需要 HTTP /2 支持的服务客户端,例如 不支持以下 Java 系统属性:
|
1 由于 AWS CRT基于这些客户端的额外好处,我们建议您尽可能使用这些HTTP客户端。
智能配置默认值
AWS SDK for Java 2.x (版本 2.17.102 或更高版本)提供智能配置默认功能。此功能优化了两个HTTP客户端属性以及其他不影响HTTP客户端的属性。
智能配置默认值会根据您提供的默认模式值,为 connectTimeoutInMillis
和 tlsNegotiationTimeoutInMillis
属性设置合理的值。您可以根据应用程序的特性选择默认模式值。
有关智能配置默认值以及如何选择最适合您的应用程序的默认模式值的更多信息,请参阅AWS SDKs和工具参考指南。
以下是为应用程序设置默认模式的四种方法。
如果您使用系统属性、环境变量或 AWS 配置文件全局设置默认模式,则可以在构建HTTP客户端时覆盖这些设置。
使用该httpClientBuilder()
方法构建HTTP客户端时,设置仅适用于您正在构建的实例。此处显示了此方法一个示例。本示例中基于 Netty 的HTTP客户端会覆盖为和全局设置的任何默认模式值。connectTimeoutInMillis
tlsNegotiationTimeoutInMillis