ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AWS SDK for Java v2 2.46.x 版本解析:默认 HTTP 客户端切换、S3 分片上传修复与全套服务更新

AWS SDK for Java v2 2.46.x 版本解析:默认 HTTP 客户端切换、S3 分片上传修复与全套服务更新 AWS SDK for Java v2 2.46.x 版本解析默认 HTTP 客户端切换、S3 分片上传修复与全套服务更新【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2本文以 AWS SDK for Java v2 官方仓库 changelogs/2.46.x-CHANGELOG.md 为骨架系统梳理 2.46.02.46.21 共 22 个版本的变更全貌既有影响所有服务客户端的重大架构决策默认 HTTP 客户端从 Apache 4 切换为 Apache 5、涉及 S3 分片上传与异步请求体的关键 Bugfix也有覆盖 AWS Config、S3、Lambda、Bedrock、Cognito 等数十个服务的功能更新与修复。读完本文你将掌握 2.46.x 版本的技术要点、受影响面与升级注意事项并了解这些变更在仓库源码中的落点。一、版本概况与阅读方法2.46.x 是 AWS SDK for Java v2 在 2026 年 6 月至 7 月间发布的系列版本起始版本 2.46.02026-06-01最终版本 2.46.212026-07-02。每次发布都遵循固定的 Changelog 结构Features新增 API、参数或行为增强Bugfixes缺陷修复并尽可能标注关联的 GitHub Issue 与社区贡献者Contributors鸣谢外部贡献者例如本系列中的 [sjh9714]、[goutamadwant]、[parasparani1]、[henricook]。绝大多数服务功能更新属于服务端新能力在 SDK 中的同步开放而 SDK 自身的变更AWS SDK for Java v2 / Codegen / 各 HTTP Client 模块才是与每个使用方直接相关的部分本文会重点展开。仓库内全部版本的完整记录见 changelogs 目录汇总入口为 CHANGELOG.md。二、本系列最重要的架构变更默认 HTTP 客户端切换为 Apache 52.46.02026-06-01是本系列最具影响力的一次发布。此版本将服务客户端的默认运行时依赖从apache-client替换为新的apache5-client这意味着只要没有在客户端 Builder 上显式配置 HTTP 客户端服务客户端将默认使用Apache5HttpClient。官方 Changelog 同时给出了三个需要特别注意的行为差异日志器名称不同Apache 5 使用与 Apache 4 不同的 logger 名称依赖日志过滤、告警规则或日志采集配置的用户需要同步调整Expect: 100-continue默认关闭Apache 4 时代默认开启的 100-continue 握手在 Apache 5 下默认禁用SecurityManager 环境下的 TCP keep-alive启用 TCP keep-alive socket 选项需要jdk.net.NetworkPermission权限。此外 2.46.0 同步将httpcomponents.client5升级到 5.6.1。作为配套2.46.18将httpcore5升级至 5.4.3修复了一个与 100-continue 相关的协议缺陷当请求携带Expect: 100-continue时早期返回的 3xx 重定向响应不再导致客户端无法终止请求关联 Issue #7047。在仓库中apache5-client模块位于 http-clients/apache5-client/pom.xml其依赖声明直接引用httpclient5与httpcore5两个组件模块所在父目录 http-clients 还包含apache-clientApache 4、netty-nio-client、aws-crt-client、url-connection-client等备选实现。升级建议如果你在业务代码中显式构建了ApacheHttpClientApache 4升级到 2.46.x 后行为不受影响但如果你依赖默认客户端请核对日志配置、100-continue 相关超时/重试逻辑以及 SecurityManager 策略文件。三、S3 相关修复分片上传、跨区域 PUT 与 CRT 客户端2.46.x 在 S3 方向集中修复了若干分片multipart上传与异步传输的疑难问题均与仓库services/s3模块及core/sdk-core的异步请求体实现直接相关。3.1 分片上传200 响应中携带错误的处理2.46.21S3 有一个著名的反直觉行为CompleteMultipartUpload等操作在业务失败时仍可能返回HTTP 200错误被包装在响应体的 XMLError元素中。2.46.21 修复了S3 CRT 客户端在 PutObjectmultipart场景下未正确处理这种 200 OK 错误的问题。从源码看S3 CRT 客户端在 S3CrtResponseHandlerAdapter.java 中对此有专门的注释说明handleServiceError仅在crtCode ! SUCCESS时被调用当响应状态为 200 时这是 S3 的 200 with error in body 情形例如 CompleteMultipartUpload 返回 HTTP 200 但 body 携带ErrorXML并会在 同文件 L340 附近即使 HTTP 200 也解析响应体以检测该模式。本次修复正是补上了分片 PutObject 链路中对这一模式的遗漏。3.2 跨区域 PUT 强制Expect: 100-continue2.46.172.46.17 修复了一个跨区域重定向问题所有跨区域的 PUT 操作现在始终设置Expect: 100-continue从而保证当首次请求发往错误区域时客户端能正确处理 3xx 重定向。这与 2.46.0 中Apache 5 默认关闭 100-continue的变更形成呼应——如果你的环境依赖 100-continue 语义需评估默认客户端切换后的行为差异。3.3 未知内容长度的分片上传死锁防护2.46.82.46.8 修复了 S3 分片上传在内容长度未知时可能无限挂起的问题当apiCallBufferSizeInBytes小于minimumPartSizeInBytes的两倍时旧版本会死锁。现在 SDK 会在请求阶段快速失败并给出描述性错误而非静默挂死。使用 CRT 或异步分片上传、且手动调小缓冲区的用户应检查自己的缓冲配置是否满足该约束。3.4 注释Annotation能力2.46.122.46.12 为 S3 增加了对象注释annotations支持每个对象最多可附加1000 条注释、每条最大 1 MB并提供创建、读取、列出、删除注释的新 API同时支持在 S3 Metadata 中配置注释表。同一版本中S3 Vectors 的 QueryVectors 支持分页单次查询最多返回 10,000 条结果。相关实现位于 services/s3 模块。四、异步请求体与流式传输的深度修复4.1AsyncRequestBody.fromInputStream()内存优化2.46.132.46.13 修复了AsyncRequestBody.fromInputStream()在处理小块读取流如PipedInputStream每次read()只返回很少字节时的高内存占用问题。修复策略是基于InputStream.available()合理设定读取缓冲区大小避免为小流分配过大缓冲区在缓冲区交给下游流水线持有前裁剪过大的后备数组。在仓库中该方法由 InputStreamWithExecutorAsyncRequestBody.java 实现它通过共享线程池线程名前缀sdk-async-input-stream、daemon 线程在后台线程读取 InputStream并支持重订阅时reset()流以支持重试。若你通过 AsyncRequestBody.java 的fromInputStream(InputStream, Long)系列工厂方法上传流式数据2.46.13 之后的内存峰值会更可预期。4.2BufferedSplittableAsyncRequestBody.builder()与bufferBeforeSend2.46.112.46.11 为 S3 分片上传引入BufferedSplittableAsyncRequestBody.builder()并新增bufferBeforeSend选项开启后每个分片在发送前会被完整缓冲修复了从慢速流式源如 SFTP重试分片时抛出NonRetryableException的问题。该类的公开实现位于 BufferedSplittableAsyncRequestBody.javabufferBeforeSend默认为 false在已知内容长度路径下分片初始化后立即发送让 HTTP 连接在数据仍在到达时就能打开开启后每个分片由SplittingPublisher见 SplittingPublisher.java产出可重试的CloseableAsyncRequestBody保证重试缓冲在 HTTP 层订阅前已填充完毕文档特别说明开启该选项不会增加内存上限——缓冲数据仍受AsyncRequestBodySplitConfiguration中bufferSizeInBytes约束只是数据在缓冲区中停留时间略长。典型用法摘自类 JavadocAsyncRequestBody originalBody AsyncRequestBody.fromString(Hello World); BufferedSplittableAsyncRequestBody retryableBody BufferedSplittableAsyncRequestBody.create(originalBody); BufferedSplittableAsyncRequestBody fullBufferedBody BufferedSplittableAsyncRequestBody.builder() .asyncRequestBody(originalBody) .bufferBeforeSend(true) .build();4.3 流式响应重试2.46.152.46.15 修复了Netty NIO HTTP 客户端的流式响应问题对流式响应 Publisher 的失败进行装饰包装使S3AsyncClient.getObject能够对 Netty 读超时进行重试。该修复由贡献者 [goutamadwant] 提交。五、SDK 代码生成Codegen与 GraalVM 原生镜像修复5.1 代码生成错误信息更友好2.46.182.46.18 修复了 Codegen 在模型引用不存在的 shape 时抛NullPointerException的问题现在会以清晰的模型校验错误终止并明确指出有问题的 shape、member 及无法解析的目标。同时Codegen 模块还修复了支持生成整型参数值的端点测试在生成前校验 paginator 定义。相关实现位于 codegen 与 codegen-lite 模块。5.2 GraalVM 原生镜像中的 MIME 类型检测2.46.182.46.18 将sdk-core的mime.types资源纳入原生镜像资源配置使 GraalVM native image 下默认 MIME 类型检测可用修复 Issue #7063由贡献者 [sjh9714] 提交。仓库中的证据非常直接 resource-config.json 在resources.includes中加入了\Qsoftware/amazon/awssdk/core/util/mime.types\E模式而 Mimetype.java 从 classpath 根目录加载mime.types其内部常量MIME_TYPE_PATH software/amazon/awssdk/core/util/mime.types。使用 GraalVM 原生镜像部署 SDK 的读者升级后无需额外手写-H:IncludeResources即可获得默认 MIME 检测能力。六、HTTP 客户端层的其他修复2.46.x 对三个 HTTP 客户端都有实质修复值得在升级时逐一对照版本客户端修复内容2.46.4AWS CRT HTTP Client修复连接池耗尽问题请求中止或超时后连接未被释放2.46.12AWS CRT HTTP Client将连接池获取超时及其他瞬时 HTTP 错误包装为IOException使 SDK 重试层将其视为可重试2.46.15Netty NIO HTTP Client装饰流式响应 Publisher 失败使S3AsyncClient.getObject可重试 Netty 读超时2.46.18Apache 5 HTTP Clienthttpcore5升级至 5.4.3修复Expect: 100-continue下的早期 3xx 响应处理Issue #70472.46.5SDK 核心Netty 升级至 4.1.135相关模块路径http-clients/aws-crt-client、http-clients/netty-nio-client、http-clients/apache5-client。七、SDK 附加模块修复Amazon SNS Message Manager2.46.7修复SnsMessageManager拒绝合法 SNS 消息的问题——当签名时间戳恰为整秒零毫秒时规范字符串由Instant#toString()重建会丢弃.000小数部分与 SNS 签名值不匹配。该模块位于 services-custom/sns-message-manager。S3 Transfer Manager2.46.1修复downloadDirectory的资源泄漏——取消下载后迟到的文件传输仍可能重建目标目录现在在DownloadDirectoryHelper中增加了取消后的跳过保护。相关实现位于 services-custom/s3-transfer-manager。S3 Event Notification2.46.13新增ObjectAnnotation支持贡献者 [parasparani1]模块位于 services-custom/s3-event-notifications。Amazon DynamoDB Enhanced Client2.46.0提升模块代码覆盖率见 services-custom/dynamodb-enhanced。八、主要服务功能更新速览2.46.x 系列覆盖了数十个服务的新能力以下是按版本整理的要点SDK 侧的体现为对应新 API、新参数与新枚举值的同步生成2.46.0Cognito Identity Provider 支持多区域复制与 KMS CMK 静态加密QuickSight 开放 Spaces、Agents、Flows 公开 APIMarketplace Agreement 的 SearchAgreements 响应新增 Entitlements。2.46.1Lambda 支持标签传播配置ElastiCache for Valkey 支持基于 Multi-AZ 事务日志的持久化EC2 支持未来日期容量预留的自助取消可先生成取消报价Transcribe 新增 am-ET、es-MX 等 9 个语言区域。2.46.2Location Service Routes V2 恢复standardRegionalEndpoints修复无法连接端点 URL问题。2.46.3ARC Region Switch 新增 Aurora Serverless/Provisioned 扩缩容与 Neptune Global Database 故障转移执行块Cost Explorer 支持基于目标覆盖率的 Savings Plans 购买分析。2.46.4AWS Config 支持服务关联的内部规则Glue Interactive Sessions 支持 Apache Spark ConnectgRPC 远程执行EMR on EC2 新增 Spark Connect 交互式会话 API 与sessionEnabled参数。2.46.5MediaConvert 支持可配置的加密输出开篇 Clear Lead 段数与多 trickplay 变体SageMaker 推理优化支持 MLflow 实验跟踪。2.46.6Compute Optimizer 与 Cost Optimization Hub 新增 Idle 推荐资源类型MediaPackage v2 支持 DASH 音频时间线模板化。2.46.7Outposts 新增自助报价与下单 APICreateQuote、GetQuote、ListQuotes 等Bedrock 新增账户级数据保留 APIPut/GetAccountDataRetentionCloudWatch 新增数据集 KMS 加密 API。2.46.8Sign-In 服务支持基于资源策略的 Console 访问控制可限定 VPC、VPC Endpoint、IPEC2 支持 AMI WatermarkLightsail 新增 ap-east-1、eu-south-2、sa-east-1 区域SageMaker Notebook 支持 G6e 实例。2.46.9EKS 本地集群Outposts新增etcdInstanceType与spreadLevel参数Neptune 支持 IPv6 dual-stackNetworkTypeDUALHealthLake 新增 UpdateFHIRDatastore。2.46.10ACM 证书透明度日志退出选项废弃合规要求所有公开证书自动记录Glue GetTable 支持检索 Iceberg 表元数据Firehose KeyARN 改为仅接受 KMS key ARN不接受别名 ARN。2.46.11WAFV2 支持 AI 流量变现x402 支付网络与 Monetize 规则动作Bedrock Runtime 新增 InvokeGuardrailChecks 纯检测 APIRDS 支持 SQL Server BYOM 与 DB2 Community Edition。2.46.12S3 支持注释1000 条 × 1 MB与注释表SageMaker 新增 GPU/主机/框架原生推理指标与多 AZ 放置指标Route 53 Resolver 支持 PartnerManagedRules。2.46.13Bedrock 托管知识库支持基于资源的跨账户策略AgentCore Harness GAqualifier 参数、AWS SkillsOpenSearch 支持 UpdateApplication 配置 IAM Identity CenterAmazonMQ for RabbitMQ 支持私有网络与 AWS RAM 资源共享。2.46.14Batch 新增有序分配策略BEST-FIT-PROGRESSIVE-ORDERED 等CloudWatch Logs FilterLogEvents 新增startFromHead倒序时间戳ECS 服务支持 20 秒高分辨率指标SageMaker HyperPod 支持自动 AMI 补丁。2.46.15Glue 新增 SearchAssets 全文搜索Connect 推出基于点的评分系统OpenSearch 新增数据源挂载/卸载 API。2.46.16Lambda Core 初始发布网络连接器创建/管理/打标 APIMSK Replicator 支持外部集群 mTLS 认证CloudWatch Logs 新增 syslog 摄取 APIGuardDuty 新增 AI 驱动调查。2.46.17MSK Replicator 支持 mTLS面向 Express broker。2.46.18Lambda 支持自管 S3 桶存放代码WAF 支持关联 Bedrock AgentCore GatewayCloudWatch 新增 Log Based AlarmsPutLogAlarmAppConfig 推出实验工具AB/多变量测试与渐进发布。2.46.19ACM 支持 ACME 协议签发公共证书CloudFormation 新增 Express 模式与 DisableValidationNetwork Firewall 支持容器关联CloudWatch 告警支持壁钟对齐评估窗口EKS 支持 Kubernetes 版本回滚。2.46.20MediaConvert 支持整秒时长归一化与加权预测开关Marketplace Metering BatchMeterUsage 上报窗口从 6 小时延长至 24 小时Connect 新增 SendOutboundWebNotificationEC2 支持 VPC 加密控制、AMD SEV-SNP 专用主机。2.46.21Config 支持组织级规则与合规包的 tag-on-createCognito 新增 GetProvisionedLimit / UpdateProvisionedLimit预置 API 速率限制管理Connect Customer Profiles 支持推荐多样化与模型版本回滚。九、升级建议与注意事项汇总基于上述变更从 2.46.0 之前版本升级到 2.46.x 时建议按以下清单自检HTTP 客户端确认是否依赖默认apache-client若是需接受默认切换为apache5-client并核对日志器名称、Expect: 100-continue默认关闭与 SecurityManager 权限S3 分片上传检查apiCallBufferSizeInBytes与minimumPartSizeInBytes的比例约束2.46.8 起快速失败慢速流式源场景可启用bufferBeforeSend2.46.11原生镜像GraalVM 用户升级后自动获得mime.types资源包含2.46.18依赖版本Netty 4.1.1352.46.5、httpcore5 5.4.32.46.18、httpclient5 5.6.12.46.0废弃与行为变化ACM 的CertificateTransparencyLoggingPreference已废弃2.46.10Firehose 的 KeyARN 不再接受别名 ARN2.46.10AWS Config 的 PutOrganizationConfigRule 等开始支持 tag-on-create2.46.21。仓库中 Changelog 的完整历史见 changelogs 目录各版本对应的模块源码与测试可沿 services、core、http-clients、services-custom 等目录继续深入查阅。【免费下载链接】aws-sdk-java-v2The official AWS SDK for Java - Version 2项目地址: https://gitcode.com/GitHub_Trending/aw/aws-sdk-java-v2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表