如何验证Java驱动程序上配置的一致性级别?

btxsgosb  于 2022-09-27  发布在  Java
关注(0)|答案(2)|浏览(146)

我们目前正在从3.x升级到e1d1e。我们将programaticBuilder用于DriverConfigLoader。下面是相同的代码。

DriverConfigLoader driverConfigLoader = DriverConfigLoader.programmaticBuilder()
     .withDuration(DefaultDriverOption.HEARTBEAT_INTERVAL, Duration.ofSeconds(60))
     .withString(DefaultDriverOption.REQUEST_CONSISTENCY, ConsistencyLevel.LOCAL_QUORUM.name())
     .withString(DefaultDriverOption.RETRY_POLICY_CLASS, "DefaultRetryPolicy")
     .withString(DefaultDriverOption.RECONNECTION_POLICY_CLASS, "ConstantReconnectionPolicy")
     .withDuration(DefaultDriverOption.RECONNECTION_BASE_DELAY, Duration.ofSeconds(5))
     .withString(DefaultDriverOption.LOAD_BALANCING_POLICY_CLASS, "DcInferringLoadBalancingPolicy")
     .build();

希望检查在发生写入/读取时如何验证ConsistencyLevel的正确设置。是否有调试日志打印机制可用于此目的。

oxf4rvwz

oxf4rvwz1#

@Shobby,对于DataStax Java Driver 4.x version,您可以这样做:

CqlSession session = CqlSession.builder().withConfigLoader(driverConfigLoader).build();
DriverConfig config = session.getContext().getConfig();
config.getProfiles().forEach(
    (name, profile) -> {
      System.out.println("Profile: " + name);
      profile.entrySet().forEach(System.out::println);
      System.out.println();
    });

这将打印每个定义的配置文件中每个定义选项的值。但它不会打印未定义的选项。希望这有帮助!

dgenwo3n

dgenwo3n2#

您的问题表明,您不相信配置的一致性级别没有得到驱动程序的认可,所以您正在寻找证据来证明它的认可。对我来说,这没有意义。也许您遇到了另一个与请求一致性相关的问题,您应该发布相关信息。
无论如何,DriverConfigLoader是为了方便而提供的,但我们不鼓励使用它,因为它意味着您是应用程序中的硬编码配置,这是一种不好的做法。如果您需要进行更改,由于配置是硬编码的,因此您必须重新编译应用程序。只有在您有非常具体的原因时才使用编程加载程序。
配置驱动程序选项的推荐方法是使用应用程序配置文件(application.conf)。优点包括:

  • 驱动程序选项配置在中央位置,
  • 热重新加载支持,以及
  • 更改不需要重新编译应用程序。

要将基本请求一致性设置为LOCAL_QUORUM,请执行以下操作:

datastax-java-driver {
  basic {
    request {
      consistency = LOCAL_QUORUM
    }
  }
}

有关详细信息,请参见Configuring the Java driver。干杯

相关问题