Actor 发送消息 tell (!) vs ask (?) vs forward
Tell
actorRef ! message
发送干别的去了,不管后果
Ask
import akka.actor.{ActorSystem, DeadLetter} |
- 隐式 timeout ask模式下如果超时 会有
AskTimeoutException
- 隐式 dispatch 后面的异步Future需要
- ask模式要求接受信息方 返回结果, 返回的是Future[T] 类型
- pipe 可以将结果转交给其他actor
- 如果接受信息方 出现exception 需额外处理来结束异步Future
case Request => |
case e: Exception => sender() ! Status.Failure(e)
主动结束Future
如果不做的话,Future的不会complete 也就是这句不会执行case Failure(e) => println(s"fail ${e.getMessage} in callback of future")
Output
Hello, world! |
Forward
target forward message
类似二传手的作用,可以做小路由,sender是原来的sender被带入