NoHostAvailableException: все хосты попытались выполнить запрос - PullRequest
0 голосов
/ 21 сентября 2018

Когда я подключил один узел кассандры, он работал нормально.Где, когда я подключил кластер из трех узлов (10.20.12.20, 10.20.12.21, 10.20.12.22), он выдает ошибку ниже.Почему он пытается подключиться к локальному хосту?

Причина: com.datastax.driver.core.exceptions.NoHostAvailableException: все хосты попытались выполнить запрос (пытался: localhost / 0: 0: 0: 0: 0: 0: 0: 1: 9042 (com.datastax.driver.core.exceptions.TransportException: [localhost / 0: 0: 0: 0: 0: 0: 0: 1: 9042] Не удается подключиться), localhost /127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [localhost / 127.0.0.1: 9042] Не удается подключиться)) в com.datastax.driver.core.ControlConnection.reconnectInternal (ControlConnection.java:232)~ [cassandra-driver-core-3.4.0.jar: na] в com.datastax.driver.core.ControlConnection.connect (ControlConnection.java:79) ~ [cassandra-driver-core-3.4.0.jar: na] в com.datastax.driver.core.Cluster $ Manager.negotiateProtocolVersionAndConnect (Cluster.java:1619) ~ [cassandra-driver-core-3.4.0.jar: na] в com.datastax.driver.core.Cluster $ Manager.init (Cluster.java:1537) ~ [cassandra-driver-core-3.4.0.jar: na] в com.datastax.driver.core.Cluster.init (Cluster.java:159) ~ [cassandra-driver-core-3.4.0.jar: на]

1 Ответ

0 голосов
/ 21 сентября 2018

По по умолчанию (в случае любой ошибки или пропущенного свойства) он попытается подключиться к локальному хосту, так как он установлен как DEFAULT_CONTACT_POINTS

Ваш синтаксис правильный, я думаюбыло бы то, что свойство не читается вашим приложением вообще.Вы можете попытаться отладить его и проверить.

Что касается отладки: точки контакта установлены здесь , если вы проверите, всегда будет установлено значение default = localhost .

В вашем CassandraConfig, кроме переопределения метода getKeyspaceName(), вам также необходимо переопределить методы cluster() и cassandraMapping(), чтобы он работал с желаемой настройкой.Например:

@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {

    public static final String KEYSPACE = "my_keyspace";
    // read contact points from config
    @Value("${spring.data.cassandra.contact-points}")
    private String contactPoints;


    @Override
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean bean = super.cluster();
        bean.setContactPoints(contactPoints);
        return bean;
    }

Также примечание: вы получите ожидаемое поведение, если добавите только одну контактную точку, поскольку драйвер будет искать все доступные узлы.На самом деле, если вы хотите ограничить связь с конкретным узлом, вам нужно реализовать loadBalancingPolicy для исключения.

...