

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

# 对 Amazon Keyspaces 中的常见错误进行故障排除
<a name="troubleshooting.general"></a>

遇到一般性错误？ 以下介绍一些常见问题以及如何解决这些问题。

## 一般性错误
<a name="troubleshooting-general"></a>

您会遇到以下顶级异常之一，这些异常可能因许多不同的原因而产生。
+ `NoNodeAvailableException`
+ `NoHostAvailableException`
+ `AllNodesFailedException`

这些异常是由客户端驱动程序生成的，可能发生在您建立控制连接或执行read/write/prepare/execute/batch请求时。

如果您在建立控制连接时发生错误，表明应用程序中指定的所有联系点都无法访问。如果在执行read/write/prepare/execute查询时出现错误，则表示该请求的所有重试次数都已用完。使用默认重试策略时，每次重试都是在不同的节点上尝试的。

### 如何将底层错误与顶级 Java 驱动程序异常隔离开来
<a name="troubleshooting-general-isolation"></a>

这些一般错误可能是由连接问题或在执行read/write/prepare/execute操作时引起的。在分布式系统中，必须预料到会出现暂时故障，并且应通过重试请求来处理。遇到连接错误时，Java 驱动程序不会自动重试，因此建议在应用程序中建立驱动程序连接时实施重试策略。有关连接最佳实践的详细概述，请参阅[优化无服务器环境的客户端驱动程序连接](connections.md)。

默认情况下，Java 驱动程序将所有请求设置`idempotence`为 false，这意味着 Java 驱动程序不会自动重试失败的read/write/prepare请求。要将 `idempotence` 设置为 `true` 并告诉驱动程序重试失败的请求，您可以通过几种不同的方式执行此操作。以下是如何以编程方式为 Java 应用程序中的单个请求设置幂等性的示例。

```
Statement s = new SimpleStatement("SELECT * FROM my_table WHERE id = 1");
s.setIdempotent(true);
```

您也可以通过编程方式设置整个 Java 应用程序的默认幂等性，如以下示例所示。

```
// Make all statements idempotent by default:
cluster.getConfiguration().getQueryOptions().setDefaultIdempotence(true);
//Set the default idempotency to true in your Cassandra configuration
basic.request.default-idempotence = true
```

另一项建议是在应用程序级别创建重试策略。在这种情况下，应用程序需要捕获 `NoNodeAvailableException` 并重试请求。我们建议重试 10 次，指数回退从 10 毫秒开始，最长可达 100 毫秒，所有重试的总时间为 1 秒。

另一种选项是在建立 [Github](https://github.com/aws-samples/amazon-keyspaces-java-driver-helpers/blob/main/src/main/java/com/aws/ssa/keyspaces/retry/AmazonKeyspacesExponentialRetryPolicy.java) 上可用的 Java 驱动程序连接时应用 Amazon Keyspaces 指数重试策略。

使用默认重试策略时，请确认您已与多个节点建立了连接。您可以使用 Amazon Keyspaces 中的以下查询执行该操作。

```
SELECT * FROM system.peers;
```

如果此查询的响应为空，则表示您正在使用 Amazon Keyspaces 的单个节点。如果您使用的是默认重试策略，则不会重试，因为默认重试始终发生在不同的节点上。要了解有关通过 VPC 端点建立连接的更多信息，请参阅[如何在 Amazon Keyspaces 中通过 VPC 端点配置连接](connections.md#connections.VPCendpoints)。

有关演示如何使用 Datastax 4.x Cassandra 驱动程序与亚马逊密钥空间建立连接的 step-by-step教程，请参阅。[Step-by-step 使用适用于 Apache Cassandra 的 4.x DataStax Java 驱动程序和 Sigv4 身份验证插件连接亚马逊密钥空间的教程](using_java_driver.md#java_tutorial.SigV4)