问:正确的模式
什么是在阿卡演员积累状态正确的模式?
语境:
比方说,我有几个服务,所有返回的数据。
class ServiceA extends Actor {
def receive = {
case _ => sender ! AResponse(100)
}
}
class ServiceB extends Actor {
def receive = {
case _ => sender ! BResponse("n")
}
}
// ...
我想有一个坐标谈论所有这些服务,并保持他们的反应轨道,然后发送的所有数据恢复到原始发件人的响应一个控制/监控的演员。
class Supervisor extends Actor {
def receive = {
case "begin" => begin
case AResponse(id) => ???
case BResponse(letter) => ???
}
// end goal:
def gotEverything(id: Int, letter: String) =
originalSender ! (id, letter)
def begin = {
ServiceA ! "a"
ServiceB ! "b"
}
}
随着服务响应的进入,我该如何将所有状态保持在一起?据我了解,如果我要将AResponse的值分配给例如var aResponse: Int
,那么随着接收到不同的消息,该变量不断变化,并且当我等待BResponse
消息时,我不可能依靠该var
停留。
我意识到我可以用ask
和nest/flatMap Future
的,但是从我读过的那是一个不好的模式。没有未来的方法来实现这一切吗?
为什么'aResponse'会改变多次?你只发送一条消息到'ServiceA'。你的目标究竟是什么?等到你收到'AResponse'和'BResponse'并用他们的值调用'gotEverything'? – vptheron
>>你的目标是什么?等到你收到AResponse和BResponse,并打电话给他们所有的价值? YES –
您可以将回复存储在带有某个标识符或参与者的列表中 – wedens