gpt4 book ai didi

java - Akka 。我应该以参与者的身份实现所有服务/DAO 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:10:40 26 4
gpt4 key购买 nike

在 Java 世界中,使用 3 层架构(表示层、服务层和 DAO 层)设计应用程序被认为是最佳实践。

但我目前的应用程序使用 Scala 和 Akka。在我的一位 Actor 中,收到一些消息后,我需要从数据库中检索国家列表。如果我使用 Java,很可能我会创建 CountryService 接口(interface)及其实现,以及具有相应实现的 CountryDao

但是 Akka 的方法是什么?我应该用 Actor 包装 CountryService 吗?我认为这是个坏主意,因为在这种情况下,我的 Actor 在收到一些消息后需要发送另一条消息来检索所有国家并在回复原始发件人之后。

最佳答案

这纯粹是基于我使用 Akka 的经验,其他人可能会不同意。

如果您的 Country Actor 没有状态,则不要将其设为 Actor。只需简单地使用 Scala 的 Future API 并将其通过管道返回给调用它的 Actor。这样,数据库调用可以在与您的 Actors 完全不同的执行上下文中运行(您不应该在 Actors 内部进行阻塞调用)。如果你正在考虑缓存那么我的意见是缓存仍然不是真正的状态并且使用 Guava Cache是线程安全的,可以解决问题。

所以这看起来像这样:

class MyActor(countryService: CountryService) extends Actor {
// ...
val result: Future[Countries] = countryService.getCountries
result.pipeTo(self)
// ...
def recieve = {
case Countries(c) => // use c
}
// ...
}

在某些情况下,您希望将其包装到单独的 CountryActor 中,但这些情况很特殊:即您严重依赖 Actor 路径并希望在特定路径访问服务 actor,想要专门处理错误,有一些重试逻辑等。

关于java - Akka 。我应该以参与者的身份实现所有服务/DAO 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429266/

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