Rahul Shukla
Rahul Shukla

Reputation: 505

How to handle AskTimeoutException in play controller

Hi I want to wrap AskTimeOutException and send proper message ....

  class Application @Inject()(system: ActorSystem) extends Controller {
  def index = Action { Ok("Welcome")}
  val ref: ActorSelection = system.actorSelection("akka.tcp://[email protected]:5150/user/nlp")
  implicit val timeout = Timeout(5 seconds)
  def nlp(query: String) = Action.async {
      val fut: Future[NLPResponse] = (ref ? NLPRequest(query)).mapTo[NLPResponse]
      fut map {
        case e: akka.pattern.AskTimeoutException => InternalServerError("NLP engine is down please try after some time")
        case res: NLPResponse => Ok(res.response)
      }
  }
}

Please suggest me proper way to handle it..

Upvotes: 2

Views: 528

Answers (1)

roterl
roterl

Reputation: 1883

Future errors should be handle using the recover combinator:

fut map {
  case res: NLPResponse => Ok(res.response)
} recover {
  case _: akka.pattern.AskTimeoutException => InternalServerError("NLP engine is down please try after some time")
  case e => InternalServerError("Other error: " + e.getMessage)
}

Upvotes: 2

Related Questions