2015-10-20 22 views
0

假设我有2个角色A和B,A要求B在10秒内超时。之后,B仍然忙于处理其他无法在10秒内响应A的消息,因此Future中的actor A获取超时异常。Akka问模式摆脱目标演员的邮箱超时消息?

的问题是:

1)后男演员有例外,确实是一个发送到B仍然在邮件内B的邮箱等待B处理它?

2)如果是,如何防止/检测B形式的消息?

回答

0

答案是肯定的,信息仍然在B的框中。在许多情况下,这是一种常见的关于Future的误解,例如问题模式,在这种情况下,您有一些请求正在进行,表示未来会在有限的时间后超时;大多数人会认为这将意味着,当被期待已久的过程将被取消,但没有办法,像一个Future一个通用的抽象可以做到这一点(也记得FutureThread)。

至于第二个问题的答案是,没有简单的答案,你需要考虑一个适合你的环境的策略。如果你所有的演员都驻留在同一个虚拟机中,你可以在你的消息中嵌入时间戳来验证目标演员;这仍然是活泼的,因为演员B可以花费足够的时间来处理消息以触发A方的超时,产生不一致(即A认为操作失败,B成功)。

否则,在分布式环境中,当主角A检测到超时时,可以向主角B发送补偿动作。你可能想看看在佐贺模式(你可以找到一个很好的谈话here)如果你正在做基于演员,分布式系统和您有这种情况的困扰。无论如何,只要记住分布式系统是很难的,没有任何银弹或任何方法来努力学习,以使它们正确。