【发布时间】:2015-06-15 19:01:54
【问题描述】:
假设我有演员 A。 A 期望接收消息,一旦它收到一条消息,它就会发回两条消息。
A extends Actor {
def receive: Receive = {
case M1 =>
context.sender ! M2
context.sender ! M3
}
}
在演员 A 中,我想发送一条消息,然后等待两个响应。 我知道这样的回应很容易
val task = A ? M1
Await.result(task, timeout)
但我不确定是否可以使用两条连续消息。
发送两条单独的消息很重要,因为我只需要在另一个地方等待它们中的第一个。
【问题讨论】:
-
您是否愿意创建另一个代理 M1 并等待 M2 和 M3 的演员?
-
是的,但是在另一个演员中,我们需要等到 M2 和 M3 都被接收到。有什么方法可以做到这一点?如果你的意思是异步等待 M2 和 M3 这很棘手,因为我需要确保 M3 是从参与者 A 的相应实例发送的
-
我从同事那里听说,这要么太棘手,甚至不可能,因为 akka 不是为此而设计的,正确的方法是重新设计异步接收消息的解决方案。
-
是的,这有点棘手,但还不错。看看可能会回答我会做什么。