我发现cassandra-driver-core库存在问题,导致NoHostAvailableException。
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.1.0</version>
</dependency>
如果你有一个静态变量来保存列:
private static final Select.SelectionOrAlias allSelection = QueryBuilder.select().
column("id").
column("version_id");
使用查询构建器重新使用静态变量时似乎存在问题,例如
Select s = allSelection.from(TABLE);
s.where(QueryBuilder.eq("id", id)).
and(QueryBuilder.eq("version_id", version.getVersionId()));
答案 0 :(得分:0)
库将继续将选择中的最后一列(version_id)添加到allSelection变量中,最终将导致大量列选择查询超时到Cassandra节点,如果您正在运行集群,它最终会占用所有由于NoHostAvailable异常,您的节点将从可用服务器池中退出,并且任何查询都将被拒绝。
可能的解决方案:
注意:对于我来说,这是cassandra-driver-core库的3.0.0和3.1.0版本。不确定其他版本。