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?