Lo scopo qui è di implementare una cache molto semplice per un attore che deve chiamare un servizio esterno (o un'operazione costosa ma altamente memorizzabile nella cache) senza utilizzare lo stato mutabile.È sicuro che l'attore Akka diventi un metodo per chiudere lo stato immutabile?
class A extends Actor{
def receive = {
case GetCommand =>
val response = callExternalService()
context.become(receiveWithCache(response))
context.system.scheduler.schedule(1 day, 1 day, self, InvalidateCache)
sender ! response
}
def receiveWithCache(cachedResponse:R): PartialFunction[Any,Unit] = {
case GetCommand => sender ! cachedResponse
case InvalidateCache => context.unbecome
}
}
So che ci sono modi più avanzati per attuare questo, tra i quali un CacheSystem a tutti gli effetti che si possono trovare nelle pagine modelli Akka, ma in alcuni casi che in realtà non è necessaria.
Inoltre, è interessante conoscere la risposta se l'utilizzo diventa così sicuro.
Non vedo l'ora di rispondere da solo perché questo è abbastanza elegante. – yan
Perché non chiudere in sicurezza lo stato immutabile? –
1) Non penso che evitare lo stato (locale) a tutti i costi sia ragionevole - per favore mi illumini se mi manca qualcosa - e 2) non sembrerebbe più bello usare una funzione anonima (parziale) con 'context. diventare 'invece di un metodo? –