0

我正在使用超时的询问模式向我的演员发送消息,这可能需要很长时间来处理它。如果超时到期,我想停止处理消息。但是,演员似乎一直在处理消息,而我收到了一封死信。

超时到期时,如何阻止参与者处理消息?

4

1 回答 1

3

简短的回答是你不能。一旦它开始处理它,发送 Kill 或 Poison Pill 或停止它只会阻止它处理未来的消息。长答案是,如果演员碰巧处于某种循环中并且正在检查一些可变(并且可能是全局可用的)信号以停止循环,那么也许您可以解决这个问题,但是这种方法有很多危险信号你应该忘记我什至提到过。如果长调用碰巧是对 DB 之类的阻塞 io 调用,那就别管它了;你被卡住了,直到那个电话完成(或者如果你幸运的话会超时)。

演员本身并不知道有人通过调用它,ask并且Future上游可能会超时。它对此没有概念,因此在超时时无法做出相应的反应Future

于 2013-07-18T16:19:47.937 回答