我正在尝试使用Akka TypedActors(1.1.2)。我有一个像
这样的界面trait Namespace {
def cellCount: Int
def isEmpty: Boolean
def cell(key: String): Option[CellOperations[_]]
def cellsLike(key: String): List[CellOperations[_]]
def updateOrCreateCell[T](n: String, v: Option[T]=None, d:List[DataOps[T]]=List.empty[DataOps[T]])
}
我有一个定义良好的NamespaceImpl,它扩展了它。
class NamespaceImpl extends TypedActor with Namespace with Logging {
...
}
我通过Spring创建了演员:
<akka:typed-actor id="namespace"
interface="com.fi.depends.namespace.akka.Namespace"
implementation="com.fi.depends.namespace.akka.NamespaceImpl"
timeout="10000"
scope="singleton">
</akka:typed-actor>
在运行时,我会定期超时调用updateOrCreateCell,这是我不应该理解的,因为该方法的类型为Unit,因此我希望它能生成异步调用。
在堆栈跟踪中,我看到:
akka.dispatch.FutureTimeoutException: Futures timed out after [10000] milliseconds
[NYCWD2328_1c52ee80-c372-11e0-8343-0023ae9118d8]
at akka.dispatch.DefaultCompletableFuture.await(Future.scala:718)
at akka.actor.ScalaActorRef$class.$bang$bang(ActorRef.scala:1332)
at akka.actor.LocalActorRef.$bang$bang(ActorRef.scala:587)
at akka.actor.ActorAspect.localDispatch(TypedActor.scala:966)
at akka.actor.TypedActorAspect.dispatch(TypedActor.scala:904)
at akka.actor.TypedActorAspect.invoke(TypedActor.scala:899)
at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186_1__786390915__878797045___AW_JoinPoint.proceed(Unknown Source)
at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186_1__786390915__878797045___AW_JoinPoint.invoke(Unknown Source)
at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186.updateOrCreateCell$default$3(Unknown Source)
事实上,我看到'ScalaActorRef $ class。$ bang $ bang'告诉我有些事情是非常错误的。
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果您确实将“updateOrCreateCell”的返回类型指定为Unit,会发生什么?
答案 1 :(得分:0)
最好的线程坏死,但前几天我遇到了类似的例外,并认为它可能在某些时候帮助某人。 :)
您是否在receive
中有一个被覆盖的NamespaceImpl
方法?
因为我做了(从Actor切换到TypedActor)并且完全像对你那样搞砸了......
顺便说一句:这就是你可以覆盖receive
的方法,如果你愿意,还可以在其中填写:
override def receive = {
super.receive andThen {
case message => {
logger.debug("Received message: " + message)
}
}
}