我有一个不在actor系统外部的服务,该服务通过ask调用actor系统,并希望得到响应。
一种明显的实现方法是使用 询问模式并等待响应,直到发生超时为止,如下所示:
val futureArticle = articleParseActor ? ParseArticle("someArctile")
val parsedArticle = Await.result(futureArticle, 10 seconds)
是否可以通过actor系统外部的tell(!)实现相同的目的?
答案 0 :(得分:0)
从方法签名中可以看到。
final def tell(msg: Any, sender: ActorRef): Unit
Tell方法返回Unit。这意味着您不能像Ask方法那样接收Future。
def ask(message: Any)(implicit timeout: Timeout, sender: ActorRef = Actor.noSender): Future[Any]
如果要使用tell接收消息,则可能不需要实现一些自定义ReceiverActor,它将在actor系统内部接收消息,然后在actor逻辑外部进行调用。另外,您可以实现更通用的功能,可能与ask方法类似。