As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Recebendo erros gerais? Aqui estão alguns problemas comuns e como resolvê-los.
Erros gerais
Você está recebendo uma das seguintes exceções de alto nível que podem ocorrer devido a vários motivos diferentes.
NoNodeAvailableException
NoHostAvailableException
AllNodesFailedException
Essas exceções são geradas pelo driver do cliente e podem ocorrer quando você está estabelecendo a conexão de controle ou quando está executando read/write/prepare/execute/batch solicitações.
Quando o erro ocorre ao estabelecer a conexão de controle, é um sinal de que todos os pontos de contato especificados em seu aplicativo estão inacessíveis. Quando o erro ocorre durante a execução de read/write/prepare/execute consultas, ele indica que todas as novas tentativas dessa solicitação foram esgotadas. Cada nova tentativa é tentada em um nó diferente quando você está usando a política de repetição padrão.
Como isolar o erro subjacente das exceções do driver Java de nível superior
Esses erros gerais podem ser causados por problemas de conexão ou durante a execução de read/write/prepare/execute operações. Falhas transitórias devem ser esperadas em sistemas distribuídos e devem ser tratadas repetindo a solicitação. O driver Java não tenta novamente automaticamente quando são encontrados erros de conexão, portanto, é recomendável implementar a política de repetição ao estabelecer a conexão do driver em seu aplicativo. Para obter uma visão geral detalhada das melhores práticas de conexão, consulte Otimize as conexões do driver do cliente para o ambiente sem servidor.
Por padrão, o driver Java é definido como false idempotence
para todas as solicitações, o que significa que o driver Java não repete automaticamente a read/write/prepare solicitação com falha. Para configurar idempotence
para true
e solicitar ao driver que repita solicitações com falha, você pode fazer isso de algumas maneiras diferentes. Aqui está um exemplo de como você pode definir a idempotência de forma programática para uma única solicitação em seu aplicativo Java.
Statement s = new SimpleStatement("SELECT * FROM my_table WHERE id = 1");
s.setIdempotent(true);
Ou é possível definir a idempotência padrão para todo o aplicativo Java de forma programática, conforme mostrado no exemplo a seguir.
// 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
Outra recomendação é criar uma política de repetição no nível do aplicativo. Nesse caso, o aplicativo precisa capturar o NoNodeAvailableException
e repetir a solicitação. Recomendamos 10 novas tentativas com recuo exponencial começando em 10 ms e trabalhando até 100 ms com um tempo total de 1 segundo para todas as tentativas.
Outra opção é aplicar a política de repetição exponencial do Amazon Keyspaces ao estabelecer a conexão do driver Java disponível no Github
Confirme se você estabeleceu conexões com mais de um nó ao usar a política de repetição padrão. Para isso, use a consulta a seguir no Amazon Keyspaces.
SELECT * FROM system.peers;
Se a resposta para essa consulta estiver vazia, isso indica que você está trabalhando com um único nó para o Amazon Keyspaces. Se você estiver usando a política de repetição padrão, não haverá novas tentativas porque a nova tentativa padrão sempre ocorre em um nó diferente. Para saber mais sobre como estabelecer conexões em VPC endpoints, consulteComo configurar conexões por meio de endpoints da VPC no Amazon Keyspaces.
Para ver um step-by-step tutorial que mostra como estabelecer uma conexão com o Amazon Keyspaces usando o driver Datastax 4.x Cassandra, consulte. Step-by-step tutorial para se conectar ao Amazon Keyspaces usando o driver DataStax Java 4.x para Apache Cassandra e o plug-in de autenticação SigV4