【发布时间】:2016-11-23 02:13:04
【问题描述】:
我的 Web 应用程序中的数据层由 Akka 演员组成。每当我需要访问数据时,我都会像这样调用 ActorSystem 机制:
val myActor = system.actorOf(Props[MyActor], name = "myactor")
implicit val timeout = Timeout(120 seconds)
val future = myActor ? Request1
val result = Await.result(future, timeout.duration)
我用的是Play,ActorSystem变量是通过注入获得的:
class MyClass @Inject() (system: ActorSystem)
但是我收到以下异常,说我访问该函数时演员名称不是唯一的第二次,如何解决这个问题?考虑到可以被多个线程同时使用,如何给actor命名?
play.api.http.HttpErrorHandlerExceptions$$anon$1:执行 异常[[InvalidActorNameException:演员名称[myactor]不是 独一无二!]]
** 编辑 **
我想要实现的目标类似于在 EJB 模型中拥有一个实体 Bean 容器,其中每个参与者都是一个实体 Bean。我注意到的不同之处在于,actor 不会根据需要自动创建/销毁。
【问题讨论】:
-
所以你想为每个实体/文档/行单独的
Actor?在这种情况下,我会在行的键之后命名它们。您应该创建一个代表您的实体集合(行表)的“父”actor,然后查询该“父”actor 以获取特定键。如果已经有这个key对应的actor,则返回,如果没有,先创建。 -
每个actor都应该像一个DAO类,有create/read/update/delete方法
-
好的,这是有道理的。我会更新我的答案。
标签: scala playframework akka playframework-2.5