您可能想在这里做很多事情:
这些可以通过以下方式实现:
import akka.pattern._
(d1 ? m1) zip (d2 ? m2) pipeTo that
在上面的示例中,d1/2
是目标参与者,m1/2
是要发送的消息。这些参与者的回复被压缩在一起(到 a 中Tuple2
)并转发给第二个参与者(that
在示例中)
第二种机制涉及更多。我用SyncPoints
. 所以,像这样:
case class SyncPoint(id: UUID, participants: ActorRef*)
object SyncPoint {
def newFor(participants: ActorRef*) = SyncPoint(UUID.createRandomUUID, participants)
}
然后消息的创建者首先向最终观察者发送一个 SyncPoint
val sync = SyncPoint.newFor(d1, d2)
that ! sync
现在,最终接收者知道它期待SyncPoint
每个参与者都收到关于此的消息。
d1 ! SyncPart(m1, sync)
d2 ! SyncPart(m2, sync)
在哪里
case class SyncPart(msg: Any, sync: SyncPoint)
演员将在他们处理完他们在消息中的部分后继续转发d1
。d2
that
case class SyncPartial(sync: SyncPoint, participant: ActorRef)
通过这种方式,that
它知道它正在等待来自多个参与者的消息,然后可以跟踪这些参与者何时执行了他们的处理。