你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 Java 的 Azure Cosmos 测试客户端库 - 版本 1.0.0-beta.6

包含用于测试 Azure Cosmos DB SDK 库的核心故障注入类的库。

入门

添加包

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-cosmos-test</artifactId>
  <version>1.0.0-beta.6</version>
</dependency>

先决条件

仅当计划使用日志记录时,才需要 SLF4J。还请下载 SLF4J 绑定,该绑定可将 SLF4J API 与你选择的记录实现链接在一起。 有关详细信息,请参阅 SLF4J 用户手册

SDK 提供基于 Reactor Core 的异步 API。 可在此处阅读有关 Reactor Core 和 Flux/Mono 类型的详细信息

关键概念

Azure Cosmos 测试库可用于将故障注入 Azure Cosmos SDK for Java。

示例

以下部分提供了几个代码片段,介绍了如何创建一些最常见的故障注入方案,包括:

高通道获取方案

FaultInjectionRule serverConnectionDelayRule =
    new FaultInjectionRuleBuilder("<YOUR RULE ID>")
        .condition(
            new FaultInjectionConditionBuilder()
                .operationType(FaultInjectionOperationType.CREATE_ITEM)
                .build()
        )
        .result(
            FaultInjectionResultBuilders
                .getResultBuilder(FaultInjectionServerErrorType.CONNECTION_DELAY)
                .delay(Duration.ofSeconds(6)) // default connection timeout is 5s
                .times(1)
                .build()
        )
        .duration(Duration.ofMinutes(5))
        .build();

CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(serverConnectionDelayRule)).block();

连接中断方案

FaultInjectionRule timeoutRule =
    new FaultInjectionRuleBuilder("<YOUR RULE ID>")
        .condition(
            new FaultInjectionConditionBuilder()
                .operationType(FaultInjectionOperationType.READ_ITEM)
                .build()
        )
        .result(
            FaultInjectionResultBuilders
                .getResultBuilder(FaultInjectionServerErrorType.RESPONSE_DELAY)
                .times(1)
                .delay(Duration.ofSeconds(6)) // the default time out is 5s
                .build()
        )
        .duration(Duration.ofMinutes(5))
        .build();

CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(timeoutRule)).block();

服务器返回已消失方案

FaultInjectionRule serverErrorRule =
    new FaultInjectionRuleBuilder("<YOUR RULE ID>")
        .condition(
            new FaultInjectionConditionBuilder()
                .operationType(FaultInjectionOperationType.READ_ITEM)
                .build()
        )
        .result(
            FaultInjectionResultBuilders
                .getResultBuilder(FaultInjectionServerErrorType.GONE)
                .times(1)
                .build()
        )
        .duration(Duration.ofMinutes(5))
        .build();

CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(serverErrorRule)).block();

随机连接关闭方案

FaultInjectionRule connectionErrorRule =
    new FaultInjectionRuleBuilder("<YOUR RULE ID>")
        .condition(
            new FaultInjectionConditionBuilder()
                .operationType(FaultInjectionOperationType.CREATE_ITEM)
                .endpoints(new FaultInjectionEndpointBuilder(FeedRange.forLogicalPartition(new PartitionKey("<YOUR PARTITION KEY>"))).build())
                .build()
        )
        .result(
            FaultInjectionResultBuilders
                .getResultBuilder(FaultInjectionConnectionErrorType.CONNECTION_CLOSE)
                .interval(Duration.ofSeconds(1))
                .threshold(1.0)
                .build()
        )
        .duration(Duration.ofSeconds(2))
        .build();

CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(connectionErrorRule)).block();

疑难解答

常规

Azure Cosmos DB 是一个快速、弹性的分布式数据库,可以在提供延迟与吞吐量保证的情况下无缝缩放。 凭借 Azure Cosmos DB,无需对体系结构进行重大更改或编写复杂的代码即可缩放数据库。 扩展和缩减操作就像执行单个 API 调用或 SDK 方法调用一样简单。 但是,由于 Azure Cosmos DB 是通过网络调用访问的,因此,使用 Azure Cosmos DB Java SDK v4 时,可以通过客户端优化获得最高性能。

  • 性能 指南介绍了这些客户端优化。

  • 故障排除指南 介绍了将 Azure Cosmos DB Java SDK v4 与 Azure Cosmos DB SQL API 帐户配合使用时的常见问题、解决方法、诊断步骤和工具。

启用客户端日志记录

后续步骤

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。

提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。