HTTP客户 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTTP客户

您可以更改用于服务HTTP客户端的客户端,也可以使用更改HTTP客户机的默认配置 AWS SDK for Java 2.x。本节讨论的HTTP客户端和设置SDK。

HTTP适用于 Java SDK 的客户端

同步客户端

SDK适用于 Java 的同步HTTP客户端实现了该SdkHttpClient接口。同步服务客户端(例如S3Client或)需要使用同步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客户端实现了该SdkAsyncHttpClient接口。异步服务客户端(例如S3AsyncClient或)需要使用异步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客户端的详细信息。

HTTP客户 同步还是异步 何时使用 限制/缺点
基于 Apache 的客户端 HTTP

(默认同步HTTP客户端)

同步 如果您更需要低延迟而不是高吞吐量,请使用它 与其他HTTP客户端相比,启动时间较慢
URLConnection基于的HTTP客户端 同步 如果您对限制第三方依赖项有硬性要求,请使用它 不支持该HTTPPATCH方法,这是某些操作所必需的,APIS例如 Amazon APIGateway Update 操作
AWS CRT基于同步的HTTP客户端 1 同步

• 如果您的应用程序正在中运行,请使用它 AWS Lambda

• 如果您更需要高吞吐量而不是低延迟,请使用它

• 如果您更喜欢同步SDK客户端,请使用它

不支持以下 Java 系统属性:

  • javax.net.ssl。 keyStore

  • javax.net.ssl。 keyStorePassword

  • javax.net.ssl。 trustStore

  • javax.net.ssl。 trustStorePassword

基于 Netty 的客户端 HTTP

(默认异步HTTP客户端)

异步

• 如果您的应用程序调用需要 HTTP /2 支持(例如 Kinesis)APIs,请使用它 API SubscribeToShard

与其他HTTP客户端相比,启动时间较慢
AWS CRT基于异步HTTP客户端 1 异步

• 如果您的应用程序在 AWS Lambda中运行,请使用它

• 如果您更需要高吞吐量而不是低延迟,请使用它

• 如果您更喜欢异步SDK客户端,请使用它

• 不支持需要 HTTP /2 支持的服务客户端,例如KinesisAsynClientTranscribeStreamingAsyncClient

不支持以下 Java 系统属性:

  • javax.net.ssl。 keyStore

  • javax.net.ssl。 keyStorePassword

  • javax.net.ssl。 trustStore

  • javax.net.ssl。 trustStorePassword

1 由于 AWS CRT基于这些客户端的额外好处,我们建议您尽可能使用这些HTTP客户端。

智能配置默认值

AWS SDK for Java 2.x (版本 2.17.102 或更高版本)提供智能配置默认功能。此功能优化了两个HTTP客户端属性以及其他不影响HTTP客户端的属性。

智能配置默认值会根据您提供的默认模式值,为 connectTimeoutInMillistlsNegotiationTimeoutInMillis 属性设置合理的值。您可以根据应用程序的特性选择默认模式值。

有关智能配置默认值以及如何选择最适合您的应用程序的默认模式值的更多信息,请参阅AWS SDKs和工具参考指南

以下是为应用程序设置默认模式的四种方法。

Service client

使用服务客户端生成器直接在服务客户端上配置默认模式。以下示例将 DynamoDbClient 的默认模式设置为 auto

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

您可以使用 aws.defaultsMode 系统属性来指定默认模式。如果在 Java 中设置系统属性,则需要在初始化任何服务客户端之前设置该属性。

以下示例演示了如何使用在 Java 中设置的系统属性将默认模式设置为 auto

System.setProperty("aws.defaultsMode", "auto");

以下示例演示了如何使用 java 命令的 -D 选项将默认模式设置为 auto

java -Daws.defaultsMode=auto
Environment variable

为环境变量 AWS_DEFAULTS_MODE 设置一个值以选择应用程序的默认模式。

以下信息显示了使用环境变量将默认模式的值设置为 auto 时,所运行的命令。

操作系统 设置环境变量的命令

Linux、macOS 或 Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

您可以向共享 AWS config文件添加defaults_mode配置属性,如下例所示。

[default] defaults_mode = auto

如果您使用系统属性、环境变量或 AWS 配置文件全局设置默认模式,则可以在构建HTTP客户端时覆盖这些设置。

使用该httpClientBuilder()方法构建HTTP客户端时,设置仅适用于您正在构建的实例。此处显示了此方法一个示例。本示例中基于 Netty 的HTTP客户端会覆盖为和全局设置的任何默认模式值。connectTimeoutInMillis tlsNegotiationTimeoutInMillis