scala – Akka模式 – 演员树,回复原始来源
这是一个设计问题;
说我有一堆演员做一堆处理.处理由客户端/连接actor(即树是服务器)启动.最终,客户演员想要回应.即我有一个像这样的演员系统. ActorA <---reqData--- Client_Actor | msgA /| |/ | ActorB | msgB | msgD | |/ / | ActorC ActorD---------msgY-->| |_____________msgX_________| 客户端系统需要的响应是来自叶子角色(即ActorC和/或ActorD)的输出.树中的这些演员可能会与外部系统进行交互.该树可以是一组预先定义的可能路由的演员(即,所以Client_actor刚刚具有到演员树的根ActorA的actorref). 问题是什么是最好的模式来管理将回复(msgX和/或msgY)从最终/叶子的演员返回到客户端演员? 我可以想到以下选项; >为每个连接客户端创建一个树,并让演员跟踪发送者,当他们收到一个msgX或者msgY时,将它发送回原始的发送者ref,以便消息通过树返回.每个演员将保留原始发件人的参考. 我使用Akka 2.2.1. 干杯! 解决方法
您可以使用转发方法将邮件从原始发件人转发到每个级别的子发件人.
在Client_Actor中: actorA ! "hello" 在ActorA中: def receive = { case msg => ??? actorB forward msg } 在演员B: def receive = { case msg => ??? actorC forward msg } 在ActorC: def receive = { case msg => ??? sender ! "reply" // sender is Client_Actor! } 在这种情况下,消息的“发件人”字段永远不会更改,因此ActorC将回复原始的Client_Actor! 您可以通过使用让您指定发件人的tell方法变体来进一步扩展: destinationActor.tell("my message",someSenderActor); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |