所以在datastax doc中,它声明可以通过QueryOptions全局设置ConsistencyLevel:
QueryOptions qo = new QueryOptions().setConsistencyLevel(ConsistencyLevel.ALL);
我注意到这不是静态方法,而是返回QueryOptions的一个实例。这是否意味着简单地调用此方法不会全局设置默认一致性级别,我需要在连接到Cassandra集群时使用QueryOptions?我的意思是,需要以下代码(在构建QueryOption
对象时设置Cluster
)
cluster = Cluster.builder().addContactPoint("192.168.0.30")
.withQueryOptions(new QueryOptions()
.setConsistencyLevel(ConsistencyLevel.ONE)
.withRetryPolicy(DefaultRetryPolicy.INSTANCE)
.withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy()))
.build();
session = cluster.connect("demo");
我的问题是我无法访问构建群集实例的代码。这是否意味着我无法设置全局一致性级别并且必须依赖于Statement
设置它?
答案 0 :(得分:2)
Dataxdriver表示您可以通过QueryOptions设置全局值,并且可以为每个语句定义特定查询一致性级别。如果您无权访问集群构建代码,则可以使用getConsistencyLevel
方法检查一致性级别的值。
如果这是您要为大多数语句设置的那个,那么您的工作将更容易。否则,您需要根据语句定义它。
它描述了为什么每个语句的一致性级别比具有全局值更好。
回答你的问题
“我注意到这不是一个静态方法,并返回一个QueryOptions实例。这是否意味着简单地调用此方法不会全局设置默认一致性级别,我需要在连接到Cassandra集群时使用QueryOptions?我的意思是,需要以下代码(在构建Cluster对象时设置QueryOption)“
即使您没有按照documentation在集群构建器对象上调用withQueryOptions,它也会使用默认查询选项创建实例。
检查DefaultConstructor of QueryOptions构造函数创建一个查询选项,其默认值为一致性级别和其他参数。
另外,根据Cluster builder doc,withQueryOptions也会返回一个Cluster.Builder的实例,你需要再次构建它(我想不是你想要的)。
所以摘要是:设置全局一致性级别的唯一方法是创建集群构建器对象。在您没有访问构建它的代码的情况下,您必须为每个语句设置值,或者最终建立新的(免责声明:不应该!!)并使用它。