

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對 Amazon Keyspaces 中的一般錯誤進行故障診斷
<a name="troubleshooting.general"></a>

取得一般錯誤？ 以下是一些常見問題，以及如何解決這些問題。

## 一般錯誤
<a name="troubleshooting-general"></a>

您會收到下列其中一個可能因許多不同原因而發生的頂層例外狀況。
+ `NoNodeAvailableException`
+ `NoHostAvailableException`
+ `AllNodesFailedException`

這些例外狀況是由用戶端驅動程式產生，而且可能會在您建立控制連線或執行read/write/prepare/執行/批次請求時發生。

當您建立控制連線時發生錯誤時，表示應用程式中指定的所有聯絡點都無法連線。當執行read/write/prepare/執行查詢時發生錯誤時，表示該請求的所有重試都已用盡。當您使用預設重試政策時，會在不同的節點上嘗試每次重試。

### 如何隔離基礎錯誤與最上層 Java 驅動程式例外狀況
<a name="troubleshooting-general-isolation"></a>

這些一般錯誤可能是由連線問題或執行read/write/prepare/執行操作時造成。必須在分散式系統中預期暫時性失敗，並且應該透過重試請求來處理。遇到連線錯誤時，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)。

如需step-by-step教學課程，說明如何使用 Datastax 4.x Cassandra 驅動程式建立與 Amazon Keyspaces 的連線，請參閱 [使用適用於 Apache Cassandra 的 4.x DataStax Java 驅動程式和 SigV4 身分驗證外掛程式連線至 Amazon Keyspaces 的Step-by-step教學課程](using_java_driver.md#java_tutorial.SigV4)。