我试图从AKKA演员那里得到回复,但我可以在Ask方法的帮助下得到回复
object mainTest {
val TestTypedSystem: ActorSystem[FuncTest.TypedFuncTest] = ActorSystem(FuncTest(),"FuncTest")
implicit val sc: Scheduler = TestTypedSystem.scheduler
implicit val ex: ExecutionContext = TestTypedSystem.executionContext
import scala.concurrent.duration._
import scala.language.postfixOps
implicit val timeout: Timeout = Timeout(3 seconds)
import FuncTest._
//passing actorContext to the immutable Case class directly
val testList = List (
AskSomeoneTyped("Jay", 32, 'c',ActorRef[FuncTest.TypedFuncTest]),
AskSomeoneTyped("Jay1", 32, 'a',ActorRef[FuncTest.TypedFuncTest]),
AskSomeoneTyped("Jay2", 32, 'b',ActorRef[FuncTest.TypedFuncTest])
)
testList.foreach {
player => TestTypedSystem ! TestaddSomeone(player)
}
def main(args: Array[String]): Unit = {
//Ask pattern to get responses by passing self context
val sendingResp = TestTypedSystem.ask{
f: ActorRef[FuncTest.TypedFuncTest] => AskSomeoneTyped("Jay",32,'c',f)
}
sendingResp.onComplete{
case Success(value) => TestTypedSystem.log.info(s"Successfully completed : $value")
case Failure(exception) => TestTypedSystem.log.warn(s"Got an exception $exception")
}
}
}
上面来自main方法的Ask模式帮助我通过一次传递1个参数来返回结果,但是当使用list.foreach时,我不能传递ActorSystem的上下文来获得对一个演员列表的响应。
邮件将发送到DeadLetters
有什么建议吗?
1条答案
按热度按时间4c8rllxm1#
仍然有很多代码丢失,所以我无法验证我的答案。但是,一个有根据的猜测是:
列表中三个case类示例的第四个参数
引用参与者引用的 * 类型 , 而不是 * 实际的参与者引用。如果
FuncTest.apply()
的行为(在上面缺少)尝试向这些“引用”发送回复,则不会有任何回复。问题是maintest对象不是一个actor,因此没有actor引用。Akka不能向它发送消息。因此在ask模式中出现
f
提供此参考。请参阅文档。
您可能需要尝试更多类似的方法:
希望这对你有帮助。