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

aamkag61  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(256)

我想要两种不同延迟的重试连接(我使用运行在kubernetes和jedisclinet上的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()));
 }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题