Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用retryWhen以两种不同的延迟重新连接_Java_Redis_Rx Java2 - Fatal编程技术网

Java 使用retryWhen以两种不同的延迟重新连接

Java 使用retryWhen以两种不同的延迟重新连接,java,redis,rx-java2,Java,Redis,Rx Java2,我希望有两种不同延迟的重试连接(我使用运行在库伯内特斯和绝地克林特上的Redis)。 可以这样做,并在同一块中使用retryWhen两次吗?如果没有,怎么做?单元测试为我提供了一个无法正常工作的功能(我认为只有第一个retryWhen被调用,但第二个没有)。臭虫在哪里 public Observable<String> getMessagesFromChannel(String channel) { return PublishSubject.<String>from

我希望有两种不同延迟的重试连接(我使用运行在库伯内特斯和绝地克林特上的Redis)。 可以这样做,并在同一块中使用
retryWhen
两次吗?如果没有,怎么做?单元测试为我提供了一个无法正常工作的功能(我认为只有第一个
retryWhen
被调用,但第二个没有)。臭虫在哪里

public Observable<String> getMessagesFromChannel(String channel) {
  return PublishSubject.<String>fromPublisher(
        subscriber ->
                config.executor().execute(() -> 
                bindRedisSubscriptionToPublisher(channel,subscriber)))
        .retryWhen(t -> t.take(config.numberOfReconnectWhenNetworkIsBreak()).delay(1, TimeUnit.SECONDS))
        .doOnError(ex -> 
    log.trace("Trying to subscribe " + config.numberOfReconnect() + " times without success"))
        .retryWhen(
        ts -> ts.doOnEach(
                ex -> {
                  log.warn(
                      "Redis instance down. Error while subscribing, trying to reconnect in {} ms",
                      config.reconnectTimeAfterRedisInstanceDown().toMillis(),
                      ex.getValue());
                })
       .delay(config.reconnectTimeAfterRedisInstanceDown().toMillis(), MILLISECONDS, config.scheduler()));
 }
公共可观察getMessagesFromChannel(字符串通道){
返回PublishSubject.fromPublisher(
订户->
config.executor().execute(()->
BindRedisSubscriptionPublisher(频道、订阅者)))
.retryWhen(t->t.take(config.numberOfReconnectWhenNetworkIsBreak()).delay(1,TimeUnit.SECONDS))
.doon错误(ex->
log.trace(“尝试订阅”+config.numberOfReconnect()+“次,但未成功”))
retryWhen先生(
ts->ts.doOnEach(
ex->{
log.warn(
“Redis实例关闭。订阅时出错,尝试在{}ms内重新连接”,
config.reconnectTimeAfterRedisInstanceDown().toMillis(),
例如getValue());
})
.delay(config.reconnectTimeAfterRedisInstanceDown().toMillis(),毫秒,config.scheduler());
}

>我想要两种类型的重试连接--请您更具体一点好吗?请用文字说明您的重试策略应该如何工作。好的,因为断开了网络连接,我想在没有任何日志跟踪的情况下,以1秒的延迟重试5次,但是如果我仍然没有连接到redis实例,我想添加一个警告并延迟10秒重试,因为我希望当Redis再次由kubernetesOk安装时会出现这种情况,我明白了。让我们看看我们能做什么>我想有两种类型的重试连接--您能更具体一点吗?请用文字说明您的重试策略应该如何工作。好的,因为断开了网络连接,我想在没有任何日志跟踪的情况下,以1秒的延迟重试5次,但是如果我仍然没有连接到redis实例,我想添加一个警告并延迟10秒重试,因为我希望当Redis再次由kubernetesOk安装时会出现这种情况,我明白了。让我们看看我们能做些什么