我正在使用超时的询问模式向我的演员发送消息,这可能需要很长时间来处理它。如果超时到期,我想停止处理消息。但是,演员似乎一直在处理消息,而我收到了一封死信。
超时到期时,如何阻止参与者处理消息?
简短的回答是你不能。一旦它开始处理它,发送 Kill 或 Poison Pill 或停止它只会阻止它处理未来的消息。长答案是,如果演员碰巧处于某种循环中并且正在检查一些可变(并且可能是全局可用的)信号以停止循环,那么也许您可以解决这个问题,但是这种方法有很多危险信号你应该忘记我什至提到过。如果长调用碰巧是对 DB 之类的阻塞 io 调用,那就别管它了;你被卡住了,直到那个电话完成(或者如果你幸运的话会超时)。
演员本身并不知道有人通过调用它,ask
并且Future
上游可能会超时。它对此没有概念,因此在超时时无法做出相应的反应Future
。