如何以编程方式在 CqlSessionBuilder 中设置 DcInferringLoadBalancingPolicy
How to set DcInferringLoadBalancingPolicy in CqlSessionBuilder programmatically
我使用 4.4.0 datastax-java-驱动程序。在我的场景中,我必须在连接到远程集群时提供联系点。如果我这样做,我会收到以下错误 - Since you provided explicit contact points, the local DC must be explicitly set.
我也没有明确提供此选项的选项,因为我正在按需连接到可能位于不同数据中心的不同集群。我找到了设置 DcInferringLoadBalancingPolicy 以推断数据中心的选项,但我不确定如何在 CqlSessionBuilder 中设置它。请帮我解决这个问题。
你需要非常小心 - 它主要用于构建工具的人,例如 IDE 等。对于应用程序本身,最好明确传递数据中心名称 - either via config file, or via Java system property.
简而言之,可以按如下方式完成:
ProgrammaticDriverConfigLoaderBuilder configBuilder =
DriverConfigLoader.programmaticBuilder();
configBuilder.withClass(DefaultDriverOption.LOAD_BALANCING_POLICY_CLASS,
DcInferringLoadBalancingPolicy.class);
DriverConfigLoader loader = configBuilder.endProfile().build();
CqlSessionBuilder clusterBuilder = CqlSession.builder()
.addContactPoints(hosts);
CqlSession session = clusterBuilder.withConfigLoader(loader).build();
我使用 4.4.0 datastax-java-驱动程序。在我的场景中,我必须在连接到远程集群时提供联系点。如果我这样做,我会收到以下错误 - Since you provided explicit contact points, the local DC must be explicitly set.
我也没有明确提供此选项的选项,因为我正在按需连接到可能位于不同数据中心的不同集群。我找到了设置 DcInferringLoadBalancingPolicy 以推断数据中心的选项,但我不确定如何在 CqlSessionBuilder 中设置它。请帮我解决这个问题。
你需要非常小心 - 它主要用于构建工具的人,例如 IDE 等。对于应用程序本身,最好明确传递数据中心名称 - either via config file, or via Java system property.
简而言之,可以按如下方式完成:
ProgrammaticDriverConfigLoaderBuilder configBuilder =
DriverConfigLoader.programmaticBuilder();
configBuilder.withClass(DefaultDriverOption.LOAD_BALANCING_POLICY_CLASS,
DcInferringLoadBalancingPolicy.class);
DriverConfigLoader loader = configBuilder.endProfile().build();
CqlSessionBuilder clusterBuilder = CqlSession.builder()
.addContactPoints(hosts);
CqlSession session = clusterBuilder.withConfigLoader(loader).build();