重试单机未在服务器上命中

问题描述 投票:0回答:1
return Single.fromFuture(
        asyncStub.withDeadlineAfter(ClientConfiguration.INSTANCE.getMaxTimeout(), TimeUnit.SECONDS).checkBalance(payload))
        .doOnSubscribe(s -> System.out.println("subscribing"))
        .doOnSuccess((resp) -> {
                    log.info("Check Balance got response success {}", resp.getUserID());
                    log.debug("Check Balance got response success {}", resp.toString());
                })
        .doOnError(throwable -> {
                    this.logError(throwable, "Check balance userid:" + payload);
                })
        .retry((retryCount, error) -> retryCount < 3).toFuture();

从客户端重试,但在服务器上它没有收到新请求请建议我做错了什么

java grpc-java reactivex rx-java3
1个回答
0
投票

显然您在涉及 RxJava 之前创建了一个

Future
,因此重试“常量”没有效果。即,

var serverCall = asyncStub.withDeadlineAfter(
        ClientConfiguration.INSTANCE.getMaxTimeout(), TimeUnit.SECONDS
    )
    .checkBalance(payload)
;

Single.fromFuture(serverCall)

当(重新)订阅发生时,您必须创建一个新的

Future

return Single.defer(() -> 
    Single.fromFuture(
        asyncStub.withDeadlineAfter(
            ClientConfiguration.INSTANCE.getMaxTimeout(), TimeUnit.SECONDS
        )
        .checkBalance(payload)
    )
)
.doOnSubscribe(s -> System.out.println("subscribing"))
.doOnSuccess((resp) -> {
                    log.info("Check Balance got response success {}", resp.getUserID());
                    log.debug("Check Balance got response success {}", resp.toString());
})
.doOnError(throwable -> {
                    this.logError(throwable, "Check balance userid:" + payload);
})
.retry((retryCount, error) -> retryCount < 3)
.toFuture()
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.