Padrão RxJava para solicitar um Observable remoto com um cache temporário

O caso de uso é o seguinte: desejo armazenar em cache temporariamente a última resposta observável cara emitida, mas depois que ela expirar, retorne à fonte cara Observable e faça o cache novamente, etc.

Um cenário de cache de rede bastante básico, mas estou realmente lutando para fazê-lo funcionar.

private Observable<String> getContentObservable() {

    // expensive upstream source (API, etc.)
    Observable<String> sourceObservable = getSourceObservable();

    // cache 1 result for 30 seconds, then return to the source
    return sourceObservable
            .replay(1, 30, TimeUnit.SECONDS)
            .autoConnect()
            .switchIfEmpty(sourceObservable);
}

Solicitação inicial: vai para a fonte Segunda solicitação dentro de 30 segundos após a emissão da fonte: entregue do cache Terceira solicitação fora da janela de expiração do cache: nada. Eu assino e não recebo dados, mas ele não está mudando para a fonte upstream Observable.

Parece que estou apenas me conectando ao meu ConnectableObservable deautoConnect() e nunca está terminando com vazio, então nunca está acionando minhaswitchIfEmpty().

Como posso usar essa combinação dereplay(1,x,x) eswitchIfEmpty()?

Ou estou apenas abordando isso errado desde o início?

questionAnswers(3)

yourAnswerToTheQuestion