这是一个设计问题;
假设我有一棵执行大量处理的演员树。处理由客户端/连接参与者启动(即树是服务器)。最终,客户端参与者想要一个响应。即我有一个看起来像这样的演员系统。
ActorA <---reqData--- Client_Actor
| msgA /|\
\|/ |
ActorB |
msgB | \ msgD |
\|/ \/ |
ActorC ActorD---------msgY-->|
|_____________msgX_________|
客户端系统想要的响应是叶参与者(即ActorC
和/或ActorD
)的输出。树中的这些参与者可能正在与外部系统交互。这棵树可能是一组预定义的可能路由的actor(即Client_actor
只有一个actorref 指向actor 树的根ActorA
)。
问题是管理将响应(msgX
&/or msgY
)从最终/叶参与者发送回客户端参与者的最佳模式是什么?
我可以想到以下选项;
- 为每个连接客户端创建一个树,并让参与者跟踪发送者,当他们获得一个
msgX
or时msgY
,将其发送回原始发送者 ref,以便消息通过树向上传递。即每个参与者将保留原始发件人的参考。 - 以某种方式发送消息
Client_Actor
中的 refreqData
并将其复制到树中使用的所有消息,以便叶参与者可以直接回复Client_actor
... 这似乎是性能最高的选项。不知道如何做到这一点(我正在以某种方式在包含客户端actor ref 的消息案例类上考虑一个特征)...... - 不知何故,基于通过树传递的消息中的唯一 id 查找客户端参与者或使用参与者选择(不确定这将如何与远程处理一起工作)......
- 更好的东西...
仅供参考,我正在使用 Akka 2.2.1。
干杯!