斯卡拉阿卡:有演员还记得它应该最终回复的东西吗?

Hei*_*ing 4 scala actor akka

在akka中,假设有一个线性的参与者链,每个参与者从上游接收消息,向下游发送自己的消息并等待回复,然后向上游发送消息.演员如何在以后必须回复该演员时才能记住上游演员的句柄?

例如:

A sends message to B (b ! "msg1")
B sends message to C (c ! "msg2")
C replies to B (self.reply ! "msg3")
B replies to A <--- ???
Run Code Online (Sandbox Code Playgroud)

基本上,B怎么能记住A的句柄?在这一点上做self.reply会引用C,因为C将当前消息发送给B.

par*_*tic 6

演员B必须改变CA之间的回复消息吗?

  1. 如果没有,演员B应该使用B forward "msg"而不是B ! "msg".这将保留发件人信息.当C使用回复时,答案会自动发送到A而不经过B:

    A sends message to B (b ! "msg")

    B forward the message to C (c forward "msg")

    C replies to A (self.reply ! "msg3")

  2. 如果是,请获取发件人ActorRef并将其传递给邮件发件人参考.

例如,使用一个简单的元组:

A sends message to B (b ! "msg1")
B sends message to C, with the sender reference (c ! ("msg2",self.sender) )
C replies to B adding the reference it received (self.reply ! ("msg3",ref) )
B replies to A ( ref ! "msg4" )
Run Code Online (Sandbox Code Playgroud)

在这里我使用了一个元组,但是如果你有一个更长的链,那就传递一个List[ActorRef].在前进的过程中,您会先添加发件人参考.返回时,您回复列表头并沿着回复传递列表尾部.

编辑:考虑维克多评论.