重试在Java Couchbase SDK的上下文中是什么?

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

我在我的应用程序中使用Java Sofabase sdk。设置DefaultCouchbaseEnvironment时,遇到了RetryStrategy属性。现在,我正在使用重试策略为BestEffortRetryStrategy的默认配置。根据文档

BestEffortRetryStrategy will retry the operation until it either succeeds or the maximum request lifetime is reached

默认情况下,最大请求生存期为75秒。

现在,我想在这里了解的是重试在这里的意思。重试是否意味着在发生异常时重试该请求,还是意味着它将重试将此请求分配给某个节点以处理该请求,以防万一它无法处理,并且将继续重试75秒?

我正在查看我的应用程序日志中的不同异常以了解这一点,我可以看到TemporaryFailureException未被重试,并且在某些情况下,我还可以看到RequestCancelledException在75秒后被抛出。是否可以假设沙发床重试将其分配给节点以处理它的请求,而实际上不重试任何异常?

StackTrace for TemporaryFailureException-

stackTrace: com.couchbase.client.java.error.TemporaryFailureException: null
    at com.couchbase.client.java.bucket.api.Mutate$2$1.call(Mutate.java:246)
    at com.couchbase.client.java.bucket.api.Mutate$2$1.call(Mutate.java:220)
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:69)
    at rx.observers.Subscribers$5.onNext(Subscribers.java:235)
    at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onNext(OnSubscribeDoOnEach.java:101)
    at rx.internal.producers.SingleProducer.request(SingleProducer.java:65)
    at rx.Subscriber.setProducer(Subscriber.java:211)
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102)
    at rx.Subscriber.setProducer(Subscriber.java:205)
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102)
    at rx.Subscriber.setProducer(Subscriber.java:205)
    at rx.Subscriber.setProducer(Subscriber.java:205)
    at rx.subjects.AsyncSubject.onCompleted(AsyncSubject.java:103)
    at com.couchbase.client.core.endpoint.AbstractGenericHandler.completeResponse(AbstractGenericHandler.java:508)
    at com.couchbase.client.core.endpoint.AbstractGenericHandler.access$000(AbstractGenericHandler.java:86)
    at com.couchbase.client.core.endpoint.AbstractGenericHandler$1.call(AbstractGenericHandler.java:526)
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java)
    at java.lang.Thread.run(Thread.java:748)
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: com.couchbase.client.core.message.kv.UpsertResponse.class
    at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:118)
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:73)
    ... 21 common frames omitted```
java spring couchbase couchbase-java-api retry-logic
1个回答
0
投票

BestEffortRetryStrategy应该重试,直到超时取消请求为止。FailFastRetryStrategy不应重试。它应该立即失败。

如果您有TemporaryFailureException并具有BestEffortRetryStrategy,则应重试。如果您有未重试的代码,可以共享堆栈跟踪信息吗?

  • 麦克
© www.soinside.com 2019 - 2024. All rights reserved.