云扳手:读写事务重试关闭

问题描述 投票:0回答:1

我需要关闭 readWriteTransaction 查询块中的重试。有人可以帮我吗?

我们的应用程序是用Java(Spring boot)编写的,我在创建数据库客户端时尝试使用重试设置,但这对我来说不起作用。

我已经尝试过类似这样的代码-

    import com.google.cloud.spanner.Spanner;
    import com.google.cloud.spanner.SpannerOptions;
    import com.google.cloud.spanner.DatabaseClient;
    import com.google.cloud.spanner.DatabaseId;
    import com.google.api.gax.retrying.RetrySettings;
    import org.threeten.bp.Duration;

    //My Bean/Class Definition code here

    // Customize RetrySettings to switch off retries.
    RetrySettings retrySettings = RetrySettings.newBuilder()
        .setMaxAttempts(1) // This ensures no retries.
        .build();

    // Create SpannerOptions with the custom RetrySettings.
    SpannerOptions options = SpannerOptions.newBuilder()
        .getSpannerStubSettingsBuilder()
        .executeSqlSettings()
        .setRetrySettings(retrySettings)
        .build();

    // Create a Spanner service object.
    Spanner spanner = options.getService();

    // Get the DatabaseClient.
    DatabaseId db = DatabaseId.of("my-project-id", "my-instance-id", "my-database-id");
    DatabaseClient dbClient = spanner.getDatabaseClient(db);

    // Use the DatabaseClient to run a readWriteTransaction.
    dbClient.readWriteTransaction().run(transaction -> {
      // My transaction logic here.
      return null;
    });

但是重试仍然没有以某种方式被关闭。有人可以帮忙吗? 预先感谢。

spring-boot google-cloud-platform google-cloud-spanner
1个回答
0
投票

您介意详细说明一下为什么您想要禁用重试,以及您想要禁用什么类型的重试吗?

尚不完全清楚您要禁用哪种类型的重试。有两件事可以在 Cloud Spanner 客户端库中重试:

  1. 单个 RPC 调用,例如
    ExecuteSql
    的单个调用。为此,您的配置原则上是正确的。 但是,Java 客户端库使用
    ExecuteStreamingSql
    RPC 来执行 查询,并使用
    ExecuteSql
    RPC 来执行 DML 语句(插入/更新/删除语句)。因此,您的配置将仅阻止重试 DML 语句。
  2. 您特别提到“关闭 readWriteTransaction 查询块中的重试”。这可能表明您想要关闭读/写事务的重试。 Cloud Spanner 可以因各种原因中止任何读/写事务,如果 Cloud Spanner 中止,客户端库将重试该读/写事务。当您使用
    TransactionRunner
    (如给定示例中所示)时,这种情况会自动发生。如果您确实想禁用读/写事务的重试,则可以使用
    TransactionManager
    代替(请参阅 https://github.com/googleapis/java-spanner/blob/078b7ca95548ac984c79d29197032b3f813abbcf/google-cloud-spanner/src /main/java/com/google/cloud/spanner/DatabaseClient.java#L459)。但请注意,此选项适用于高级用例,例如用于实现您自己的驱动程序。
© www.soinside.com 2019 - 2024. All rights reserved.