我正在从 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中找不到重试机制。 我的期望是编写一个行为相同的代码。
Couchbase SDK3 的主要变化之一是 SDK 现在会在安全时自动重试。
我们确实为想要自定义行为的用户提供了 RetryStrategy 接口,请参阅此链接了解详细信息。
但几乎所有用户都对 SDK 开箱即用的重试行为感到满意,该行为在 BestEffortRetryStrategy 中实现。