假设我有一个演员树,它做一堆处理。处理由客户机/连接执行元启动(即,树是服务器)。最终客户端执行元需要响应。即。我有一个演员系统看起来是这样的。
ActorA <---reqData--- Client_Actor
| msgA /|\
\|/ |
ActorB |
msgB | \ msgD |
\|/ \/ |
ActorC ActorD---------msgY-->|
|_____________msgX_________|
客户端系统需要的响应是叶参与者的输出(即actorC
和/或actorD
)。树中的这些参与者可能正在与外部系统交互。此树可能是一组预定义的可能路由的参与者(即,因此client_actor
只有一个actorref指向参与者树的根actora
)。
问题是管理将响应(msgx
&或msgy
)从final/leaf参与者发送回客户端参与者的最佳模式是什么?
干杯!
您可以使用forward
方法将消息从原始发件人转发到每个级别的子发件人。
在Client_Actor中:
actorA ! "hello"
在Actora:
def receive = {
case msg =>
???
actorB forward msg
}
def receive = {
case msg =>
???
actorC forward msg
}
def receive = {
case msg =>
???
sender ! "reply" // sender is Client_Actor!
}
destinationActor.tell("my message", someSenderActor);
我正在尝试使用ask模式向远程参与者发送请求。本地actor接收一些值,并对其执行一些任务并更新它。然后,当本地参与者试图将更新后的值发送回远程参与者时,在发送时发生错误。我应该如何处理这个错误? 错误:[INFO][03/31/2017 17:28:18.383][ClientSystem-Akka.actor.Default-Dispatcher-3][Akka://ClientSystem/
我很想知道调整大小,或者在本例中增加单个节点系统上的actor池中actor的数量是否真的会影响性能。 我有一个带超线程的四核系统。在任何给定的点上,系统可以运行8个线程。假设执行元执行的大多数操作都是CPU绑定的,那么将池中的执行元数量从20个增加到40个会有什么收获呢?
假设我有一个IO Actor,能够通过TCP发送和接收消息。在我的演员中,我要求连接的另一方做出回应: 使用此代码,ask future超时,而包含参与者接收ask模式之外的原始消息。 你能在Akka IO演员身上使用ask模式吗?若否,原因为何?
[04/27/2014 18:09:05.518][ReadScheduler-Akka.actor.Default-Dispatcher-3][Akka://ReadScheduler/User/Collector]从参与者[Akka://ReadScheduler/User/Executor#2127791644]到参与者[Akka://ReadScheduler/User/Collector
java.util.concurrent.CompletionException:Akka.Pattern.AskTimeoutException:收件人[Actor[akka:/web_server/user/MyActor#-769383443]]已终止。发送者[null]发送了类型为“com.data.model.request”的消息。 所以我重写了方法,在那里添加了一个log语句。 现在
由于akka是一个构建actor模型的工具包,而actor模型是运行在JVM内部的对象,那么创建后的actor对象的可靠性有多高。考虑到让它崩溃的性质,除非像使用毒丸或JVM关闭一样显式地杀死它,否则JVM中actor对象的可靠性有多高,actor不是自己全部杀死的。