这里的目的是为需要在不使用可变状态的情况下调用外部服务(或一些昂贵但高度可缓存的操作)的actor实现一个非常简单的缓存。
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
}
}
我知道有更多高级方法可以实现这一点,其中包括可以在Akka模式页面中找到的完全成熟的CacheSystem,但在某些情况下确实不需要。
另外,如果使用变得像这样安全,知道答案是有趣的。