gpt4 book ai didi

scala - Akka actor 成为关闭不可变状态的方法是否安全?

转载 作者:行者123 更新时间:2023-12-04 02:02:18 24 4
gpt4 key购买 nike

这里的目的是为需要调用外部服务(或一些昂贵但高度可缓存的操作)而不使用可变状态的参与者实现一个非常简单的缓存。

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 模式页面中找到,但在某些情况下确实不是必需的。

另外,如果像这样使用变得安全,知道答案很有趣。

最佳答案

据我所知,这种技术是合理的,应该适合您使用。这实际上是一种更聪明的方法来避免必须拥有可变的 var response在你的代码中。我实际上在回答中使用了这种技术 here而 Akka 团队的 Viktor 似乎认为这是一个很好的解决方案。不过有一件事,你可以改变:

def receiveWithCache(cachedResponse:R): PartialFunction[Any,Unit] = {
case GetCommand => sender ! cachedResponse
case InvalidateCache => context.unbecome
}

到:
def receiveWithCache(cachedResponse:R): Receive = {
case GetCommand => sender ! cachedResponse
case InvalidateCache => context.unbecome
}
Receive type 是 PartialFunction[Any,Unit] 的简写别名.

关于scala - Akka actor 成为关闭不可变状态的方法是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com