在我的Spray应用程序中,我将请求委托给actor。我希望能够杀死一个花费太长时间的演员。我不确定我是否应该使用Spray超时,Akka问模式或其他什么。
我已实施:
def processRouteRequest(system: ActorSystem) = {
respondWithMediaType(`text/json`) {
params { p => ctx =>
val builder = newBuilderActor
builder ! Request(p) // the builder calls `ctx.complete`
builder ! PoisonPill
system.scheduler.scheduleOnce(routeRequestMaxLife, builder, Kill)
}
}
}
这个想法是演员只在一个请求的持续时间内生存,如果它在routeRequestMaxLife
内没有完成,它会被强行杀死。这种方法似乎过于顶层(并且发布了很多关于未传递消息的信息)。我甚至不确定它是否正常工作。
似乎我想要实现的应该是一个常见的用例。我该怎么办呢?