spring-boot - NoHostAvailableException:尝试查询的所有主机都失败
问题描述
当我连接单个节点 cassandra 时,它工作正常。当我连接一个三节点集群(10.20.12.20、10.20.12.21、10.20.12.22)时,它抛出了错误。为什么它试图连接 localhost ?
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: 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] Cannot connect), localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [localhost/127.0.0.1:9042] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:232) ~[cassandra-driver-core-3.4.0.jar:na]
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79) ~[cassandra-driver-core-3.4.0.jar:na]
at com.datastax.driver.core.Cluster$Manager.negotiateProtocolVersionAndConnect(Cluster.java:1619) ~[cassandra-driver-core-3.4.0.jar:na]
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1537) ~[cassandra-driver-core-3.4.0.jar:na]
at com.datastax.driver.core.Cluster.init(Cluster.java:159) ~[cassandra-driver-core-3.4.0.jar:na]
解决方案
默认情况下(如果出现任何错误或缺少属性),它将尝试连接到 localhost,因为它被设置为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
排除。
推荐阅读
- apache-kafka - Kafka JDBC 连接器在使用 TimestampConverter 时抛出 NullPointerException
- python - 如何将 GUI 上的检查按钮和文本条目的结果以键:值格式添加到字典中?
- java - PBKDF2 - 无法使用 Node 和 Java 生成相同的 Base64 编码密钥
- deep-learning - Pytorch:使用自定义权重图应用交叉熵损失
- python - 根据另一列 pandas 更改列的值
- python - 使用不等数量的空格重新格式化文本文件然后转换为 csv 的更有效方法
- r - How to make a frequency table from a data frame in R
- highcharts - 多个 yAxis 时,Highcharts xAxis 有额外的间隙
- c# - AspNet.Core Identity - 无法登录用户
- android - Goodle Ad Manager SDK 与 AdMob SDK