4

Futures と Akka スーパーバイザを使用してアプリケーションを開発しようとしていますが、A future がアクターに Failure を返すと、そのスーパーバイザは例外を取得しません。

これが私のコードです。

1) スーパーバイザーアクター

class TransaccionActorSupervisor() extends Actor with ActorLogging {

  val actor: ActorRef = context.actorOf(Props[TransaccionActor].withRouter(RoundRobinPool(nrOfInstances = 5)), "transaccion-actor")

  def receive = {
    case msg: Any => actor forward msg
  }

  override val supervisorStrategy = OneForOneStrategy() {
    case exception =>
      println("<<<<<<<<<<<<<<<<<<< IN SUPERVISOR >>>>>>>>>>>>>>>>>>>>>>>>>>>>")
      Restart
  }

}

監修俳優

Class TransaccionActor() extends Actor with ActorLogging {

  implicit val _: ExecutionContext = context.dispatcher
  val transaccionAdapter = (new TransaccionComponentImpl with TransaccionRepositoryComponentImpl).adapter

  def receive = {

    case msg: GetTransaccionById =>
      val currentSender: ActorRef = sender()
      transaccionAdapter.searchTransaction(msg.id).onComplete {
         case Success(transaction) => currentSender ! transaction
         case Failure(error) => throw error
      }

  }

私は何を間違っていますか?

本当にありがとうございました!

4

2 に答える 2

0

アクター内で将来スローされる例外は、アクターによってキャッチされません。監視するアクターによって処理されるようにするには、例外を にパイプしてからself再スローする必要があります。

于 2014-12-18T03:33:21.860 に答える