示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本指南基于 AWS Code Examples 仓库中javav2/example_code/memorydb目录的官方示例系统讲解如何使用 AWS SDK for Java v2 通过MemoryDbClient操作 Amazon MemoryDB for Redis——包括创建集群、创建/描述快照、删除集群等单操作示例的完整源码、命令行用法与参数含义并深入剖析 JUnit 5 集成测试MemoryDBTest的配置方式与运行原理。读完本文你将掌握 MemoryDB 集群生命周期管理的关键 API 调用模式以及如何在真实 AWS 资源上安全地测试这些代码。什么是 Amazon MemoryDB for RedisAmazon MemoryDB for Redis 是一款与 Redis 兼容、具备持久化能力的内存数据库服务提供超高性能的读写体验同时将数据持久化存储以保证不丢失。它天然支持 Redis 的数据结构与命令协议适用于需要亚毫秒级延迟且要求数据持久化的场景。在本仓库中AWS 官方提供了配套的 Java 示例代码全部基于MemoryDbClient这一同步客户端对象实现覆盖了集群与快照两条核心操作链路。源码目录结构如下javav2/example_code/memorydb/ ├── pom.xml ├── README.md └── src/ ├── main/java/com/example/memorydb/ │ ├── CreateCluster.java │ ├── CreateSnapshot.java │ ├── DeleteCluster.java │ ├── DescribeClusters.java │ ├── DescribeSnapshots.java │ └── DescribeSpecificCluster.java └── test/java/ └── MemoryDBTest.java所有示例统一使用默认凭据提供者default credentials provider获取 AWS 身份认证即通过 SDK 默认的凭据链解析环境变量、配置文件或 IAM 角色中的访问凭据。环境准备与运行前提项目构建配置pom.xml示例项目使用 Maven 构建关键配置位于 pom.xmlJava 版本java.version为 21maven.compiler.source/target均设为 21AWS SDK 版本管理通过software.amazon.awssdk:bom版本2.35.10统一管理 SDK 依赖版本核心依赖为software.amazon.awssdk:memorydb测试与工具依赖JUnit Jupiter5.11.4、Secrets Manager 客户端测试时从 AWS Secrets Manager 读取配置、Gson解析密钥 JSON、JedisRedis 客户端、SLF4J Log4j2 日志实现测试插件Maven Surefire Plugin3.5.2负责执行 JUnit 测试。凭据与费用注意事项运行这些示例会在你指定的 AWS 账户和区域中执行真实操作可能产生费用。官方 README 明确提示以下几点示例会针对你配置凭据的账户与区域执行 AWS 操作运行即可能产生账户费用运行测试同样可能产生 AWS 账户费用建议为代码授予最小权限least privilege仅授予完成任务所需的最低权限代码并非在所有 AWS 区域都经过测试使用前请确认目标区域已支持 MemoryDB。由于部分示例执行的是破坏性操作如删除集群README 特别警告运行删除或修改 AWS 资源的操作时要格外小心建议在实验时创建独立的、仅用于测试的资源。单操作示例集群的创建、查询与删除以下示例全部使用MemoryDbClient对象客户端构建模式高度一致指定区域默认Region.US_EAST_1后通过 Builder 创建。MemoryDbClient memoryDbClient MemoryDbClient.builder() .region(region) .build();创建集群CreateClusterCreateCluster.java 演示如何创建一个 MemoryDB 集群。命令行用法为clusterName nodeType subnetGroupName aclName四个参数的含义参数含义clusterName集群名称nodeType集群节点的计算与内存容量规格如db.r6g.large等 MemoryDB 节点类型subnetGroupName集群使用的子网组名称aclName与集群关联的访问控制列表ACL名称核心创建请求构建如下CreateClusterRequest request CreateClusterRequest.builder() .clusterName(clusterName) .aclName(aclName) .description(Created using the AWS SDK for Java) .numShards(1) .nodeType(nodeType) .port(6379) .subnetGroupName(subnetGroupName) .build(); CreateClusterResponse response memoryDbClient.createCluster(request); System.out.println(Cluster created. The ARN is response.cluster().arn());从源码可以看到几个值得注意的默认配置numShards(1)默认创建单分片集群分片是 MemoryDB 水平扩展的基本单元port(6379)使用 Redis 默认端口 6379description为集群附加描述信息响应对象通过response.cluster().arn()返回新集群的 ARN便于后续跟踪资源。异常处理统一捕获MemoryDbException通过e.awsErrorDetails().errorMessage()输出 AWS 返回的具体错误信息。查询所有集群DescribeClustersDescribeClusters.java 不需要命令行参数直接列出账户下所有 MemoryDB 集群DescribeClustersRequest request DescribeClustersRequest.builder().build(); DescribeClustersResponse response memoryDbClient.describeClusters(request); ListCluster clusters response.clusters(); for (Cluster cluster : clusters) { System.out.println(The cluster name is: cluster.name()); System.out.println(The cluster ARN is: cluster.arn()); System.out.println(Endpoint is: cluster.clusterEndpoint()); }每个Cluster对象都暴露了名称、ARN 以及clusterEndpoint()应用连接 MemoryDB 的终端节点地址为后续通过 Jedis 等客户端连接集群提供了基础信息。查询指定集群并等待就绪DescribeSpecificClusterDescribeSpecificCluster.java 实现了轮询等待集群可用的实用模式命令行参数为clusterName。其核心逻辑是一个循环检测函数checkIfAvailablewhile (!clusterAvailable) { myCluster getCluster(memoryDbClient, clusterName); status myCluster.status(); if ((status.compareTo(creating) 0) || (status.compareTo(snapshotting) 0)) { Thread.sleep(2000); System.out.println(The status is status); } else { clusterAvailable true; } } System.out.println(The myCluster.name() state is myCluster.status());这段代码值得细读当集群状态为creating创建中或snapshotting快照进行中时每隔 2 秒轮询一次Thread.sleep(2000)一旦状态进入其他就绪状态循环结束并输出最终状态底层的getCluster私有方法通过DescribeClustersRequest.builder().clusterName(clusterName)精确过滤目标集群从返回列表中取出唯一的Cluster对象该方法同时抛出并处理MemoryDbException与InterruptedException说明轮询期间线程中断也被纳入异常管理。这种创建后轮询等待就绪的模式是云资源异步创建场景下的标准做法在本示例的测试流程中起着关键衔接作用。删除集群DeleteClusterDeleteCluster.java 是最简单的破坏性操作示例命令行参数仅为clusterNameDeleteClusterRequest clusterRequest DeleteClusterRequest.builder() .clusterName(clusterName) .build(); memoryDbClient.deleteCluster(clusterRequest); System.out.println(clusterName was successfully deleted);删除成功后控制台会打印确认信息。需要再次强调该操作不可逆README 建议在测试专用资源上执行。快照操作创建与描述创建快照CreateSnapshotCreateSnapshot.java 为指定集群创建快照命令行用法为clusterName snapShotNameclusterName要快照的集群名称snapShotName新建快照的名称。CreateSnapshotRequest request CreateSnapshotRequest.builder() .clusterName(clusterName) .snapshotName(snapShotName) .build(); CreateSnapshotResponse response memoryDbClient.createSnapshot(request); System.out.println(The ARN of the response is response.snapshot().arn());创建成功后通过response.snapshot().arn()可获取快照的 ARN用于后续恢复、导出等操作。描述快照DescribeSnapshotsDescribeSnapshots.java 列出指定集群下的快照命令行参数为clusterNameDescribeSnapshotsRequest request DescribeSnapshotsRequest.builder() .maxResults(10) .clusterName(clusterName) .build(); DescribeSnapshotsResponse response memoryDbClient.describeSnapshots(request); ListSnapshot snapshots response.snapshots(); for (Snapshot snapshot : snapshots) { System.out.println(The snapshot name is snapshot.name()); System.out.println(The snapshot ARN is snapshot.arn()); }这里设置了maxResults(10)限制单次返回最多 10 条快照记录并遍历输出每个快照的名称与 ARN。注意原 README 的示例列表中存在若干指向错误文件的历史链接例如将描述集群描述快照误链到DeleteCluster.java实际对应的实现文件以本目录源码为准即 DescribeClusters.java、DescribeSnapshots.java 与 DescribeSpecificCluster.java。JUnit 5 集成测试MemoryDBTest 全解析测试框架与运行方式测试文件位于 MemoryDBTest.java基于JUnit 5编写可运行在 IntelliJ 等 IDE 中也可通过 Maven Surefire 插件从命令行执行mvn test测试类使用TestInstance(TestInstance.Lifecycle.PER_METHOD)每个测试方法独立实例与TestMethodOrder(MethodOrderer.OrderAnnotation.class)按Order注解顺序执行每个测试方法带Tag(IntegrationTest)标记共 6 个按序执行的测试顺序测试方法调用的业务方法验证内容Test 1createClusterCreateCluster.createSingleCluster创建集群Test 2describeSpecificClusterDescribeSpecificCluster.checkIfAvailable轮询等待集群就绪Test 3createSnapshotCreateSnapshot.createSpecificSnapshot创建快照Test 4describeSnapshotDescribeSnapshots.describeALlSnapshots描述快照Test 5describeAllClustersDescribeClusters.getClusterscheckIfAvailable列出集群并再次确认可用Test 6deleteClusterDeleteCluster.deleteSpecificCluster删除集群每个测试通过assertDoesNotThrow断言业务方法执行不抛异常成功后通过 SLF4J 日志输出Test N passed。测试之间形成完整的生命周期闭环创建 → 等待就绪 → 快照 → 删除这正是前文DescribeSpecificCluster轮询模式的用武之地——Test 2 必须先确认集群可用Test 3 才能对其创建快照。WARNING这些 JUnit 测试会操作真实的 AWS 资源并可能产生账户费用测试前后请注意清理。测试参数来源config.properties 与 AWS Secrets ManagerREADME 说明测试运行前必须在resources目录下的config.properties文件中定义以下值缺少任一值测试就会失败clusterName— 集群名称nodeType— 集群节点的计算与内存容量subnetGroupName— 集群使用的子网组名称aclName— 与集群关联的访问控制列表名称snapShotName— 快照名称。而从 MemoryDBTest.java 的实际实现看测试参数读取方式更进一步setUp()方法通过 Secrets Manager 客户端从名为test/memorydb的 AWS Secrets Manager 密钥中读取 JSON 配置private static String getSecretValues() { SecretsManagerClient secretClient SecretsManagerClient.builder() .region(Region.US_EAST_1) .build(); String secretName test/memorydb; GetSecretValueRequest valueRequest GetSecretValueRequest.builder() .secretId(secretName) .build(); GetSecretValueResponse valueResponse secretClient.getSecretValue(valueRequest); return valueResponse.secretString(); }拿到 JSON 字符串后用 Gson 反序列化为内部嵌套类SecretValues从而获取clusterName、nodeType、subnetGroupName、aclName、snapShotName五个字段。也就是说config.properties 与 Secrets Manager 两种配置方式均可支撑测试运行具体采用哪种取决于测试类的读取路径。测试资源的随机化处理为避免测试资源命名冲突setUp()中为clusterName和snapShotName追加了随机数后缀Random random new Random(); int randomNum random.nextInt((10000 - 1) 1) 1; clusterName values.getClusterName() randomNum; nodeType values.getNodeType(); subnetGroupName values.getSubnetGroupName(); aclName values.getAclName(); snapShotName values.getSnapShotName() randomNum;randomNum取值区间为[1, 10000]保证了多次并行运行测试时集群名与快照名不会互相覆盖。六步走从零运行 MemoryDB Java 示例综合 README 与源码完整的实操流程如下配置凭据确保默认凭据链可解析 AWS 访问凭据环境变量、~/.aws/credentials配置文件或 IAM 角色参考 SDK for Java 的凭据使用方式准备前置资源创建 MemoryDB 子网组与 ACL确定可用的节点类型nodeType构建项目在javav2/example_code/memorydb目录执行mvn clean package确认依赖AWS SDK BOM2.35.10、JUnit 5 等拉取成功配置测试参数在 config.properties或 AWS Secrets Manager 的test/memorydb密钥中填写clusterName、nodeType、subnetGroupName、aclName、snapShotName运行单操作示例例如创建集群java CreateCluster my-cluster db.r6g.large my-subnet-group my-acl其余示例依各自命令行参数执行创建快照需要clusterName与snapShotName两个参数描述/删除集群与描述快照需要一个clusterName参数运行集成测试在 IDE 中执行MemoryDBTest或命令行执行mvn test观察控制台逐条输出Test N passed验证从创建、轮询就绪、快照到删除的完整闭环。小结本文以官方 README 为骨架结合仓库内 6 个示例源码与 JUnit 测试完整梳理了 AWS SDK for Java v2 操作 Amazon MemoryDB for Redis 的核心链路MemoryDbClient的构建方式、创建/查询/删除集群与快照的 API 用法与参数含义、轮询等待集群就绪的实用模式以及集成测试的参数配置config.properties 与 Secrets Manager 双通道与执行机制。示例与测试代码均可在 javav2/example_code/memorydb 目录下找到并直接运行是理解 MemoryDB Java 开发与测试的最佳参考起点。本指南内容基于 AWS Code Examples 仓库Apache-2.0 许可中的官方示例与源码整理。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐如何快速集成第三方SDKAWS SDK for Java v2实战指南如何快速集成第三方SDKAWS SDK for Java v2实战指南 AWS SDK for Java v2是亚马逊官方推出的Java开发工具包专为与AW后端AWS SDK for Java v2 从源码构建与测试完整指南开发环境、Maven 构建与集成测试实战AWS SDK for Java v2 从源码构建与测试完整指南开发环境、Maven 构建与集成测试实战 本篇指南以官方仓库 aws sdk java v2后端Apache Druid 集成测试调试实战Docker 测试镜像、测试集群与 JUnit 用例的完整排障指南Apache Druid 集成测试调试实战Docker 测试镜像、测试集群与 JUnit 用例的完整排障指南 本文以 Apache Druid 仓库中 int数据库OLAP大数据后端上一篇RePKGWallpaper Engine资源全能处理工具让开发者轻松驾驭PKG与TEX文件下一篇Windows CleanerWindows系统清理优化工具完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
