假设其中一个群集节点收到一条消息,其中一个actor开始处理它。在这个节点的中间,这个节点因某种原因而死亡。消息会发生什么,我的意思是它会被另一个可用节点处理还是会丢失?
答案 0 :(得分:0)
默认情况下,akka(以及所有其他演员模型框架)提供最多一次交付。这意味着使用尽力而为的保证将消息发送给参与者 - 如果他们未能达到目标,他们将无法重新传递。这也意味着,如果消息到达目标,但与之关联的进程在完成之前被中断,则不会被重试。
话虽如此,有许多方法可以提供具有各种保证的演员之间的重新传递。
Ask
模式与ie Polly库结合使用。然而,如果发送者所在的节点将会死亡,这将无济于事 - 仅仅因为消息仍然只存储在内存中。所有这些方法都至少提供一次交付保证,这意味着可以不止一次地向同一个消息发送相同的消息。这也意味着,您的处理逻辑需要通过幂等行为或通过识别和删除接收方的重复来确认。