从java客户端SDK2迁移到SDK 3时,如何实现RetryStrategy

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

我正在从 couchbase java 客户端 SDK 2 迁移到 SDK3。 在 SDK2 代码中,我有一个方法,它使用重试机制在 AsyncBucket 上调用 upsert 方法。

下面是代码[SDK2]

client.getBucket().async().upsert(doc).retryWhen(getRetryFunction());  // client.getBucket() return object of Bucket

上面提到的代码片段定义了一个重试机制,用于使用 RetryBuilder 类处理特定的 Couchbase 异常。该机制是 getRetryFunction 方法的一部分

getRetryFunction() 的实现如下

public RetryWhenFunction getRetryFunction()
    {

       return RetryBuilder.anyOf(TemporaryFailureException.class, TemporaryLockFailureException.class, BackpressureException.class, ReplicaNotAvailableException.class, RequestCancelledException.class, CouchbaseOutOfMemoryException.class)
      .delay(((CouchbaseRetryStrategy) retryStrategy)
      .determineRetryStrategy())
      .max(retryStrategy.getMaxAttempts())
      .build();
    }

// ((CouchbaseRetryStrategy) retryStrategy).determineRetryStrategy(),  it returns object of Delay

此代码设置了一个重试机制,当发生特定的 Couchbase 异常时,该机制将使用定义的延迟策略和最大尝试次数尝试重试操作。

现在我正在迁移到 SDK3,所以我想要与上面代码类似的行为。

我在SDK3中找不到重试机制。 我的期望是编写一个行为相同的代码。

java sdk couchbase couchbase-java-api java-client
1个回答
0
投票

Couchbase SDK3 的主要变化之一是 SDK 现在会在安全时自动重试。

我们确实为想要自定义行为的用户提供了 RetryStrategy 接口,请参阅此链接了解详细信息。

但几乎所有用户都对 SDK 开箱即用的重试行为感到满意,该行为在 BestEffortRetryStrategy 中实现。

© www.soinside.com 2019 - 2024. All rights reserved.