Цель здесь - реализовать очень простой кэш для актера, которому необходимо вызвать внешнюю службу (или некоторую дорогостоящую, но очень кэшируемую операцию) без использования изменяемого состояния.
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
}
}
Я знаю, что есть более продвинутые способы его реализации, среди которых полноценная CacheSystem, которая может быть найдена на страницах шаблонов Akka, но в некоторых случаях это действительно не требуется.
Плюс, интересно узнать ответ, если использование станет таким, что это безопасно.