文档中说akka "最多只能传递一次",而且消息不能保证到达目的地。这种行为的原因是什么?未传递的消息会发生什么?它们是否被视为丢失?编辑:我忘记了最重要的部分。有没有一个丢失率我可以参考?你知道我有多悲观关于消息传递保证(如有%的失败率?)..只是因为我有一个演员集群,他们将在同一个Web服务器上运行,我不知道我是否应该考虑消息失败将是1/5,或1/100.
ehxuflar1#
因此,Akka实际上提供了“最多一次交付”和保证交付(又名“至少一次交付”)两种选择。请参见评论中的the link user1234 posted,以了解“至少一次”与“最多一次”的概念。所以Akka可以选择任何一种,为什么默认值是“最多一次”?对你的问题的简短回答是,转向有保证的交付至少有五个非常显著的成本:
因此,Akka给了您选择的机会,但它也提醒您(在该文档中),对于大多数应用程序来说,通过应用程序代码处理消息传递失败要比依赖保证传递容易得多(这既是出于性能原因,也是因为保证传递本身也会带来一些问题,如重复消息和乱序消息)。编辑:为了回应“最多一次”消息传递的可靠性,最好从弹性而不是“可靠性”的Angular 来考虑。换句话说,在正常情况下,“最多一次”和“至少一次”都会传递一条消息。“最多一次”和“至少一次”的区别在于它们处理问题的方式。例如,假设一个示例应用程序将一百万条消息从节点A上的参与者A发送到节点B上的参与者B。在正常情况下,“最多一次”和“至少一次”都将具有100%的成功率。但是如果我在测试运行中间关闭节点B,“最多一次”应用程序将开始出现网络超时错误,一些消息将失败。然而,“至少一次”版本将保存所有消息到持久性一旦发送。我实际上可以关闭节点A和节点B,等待一个月,重新打开它们,系统将恢复,所有消息将已送达。要理解的关键是,消息传递协议并不是天生就不可靠:不存在“通常有多少消息将失败”,因为消息在通常情况下即使在“最多一次”中也不会失败。如果您的硬件是100%可靠的并且您的网络是100%可靠的并且您的软件是100%可靠的,则无论使用哪种方法,您的消息都将100%送达。但如果您的网络出现故障,则使用“最多一次”,“至少一次”将丢失0%。如果您的目标服务器由于NPE而崩溃,“最多一次”将丢失100%的邮件,“至少一次”将丢失0%的邮件。在正常情况下,所有的信息都会到达,唯一的问题是你经历异常情况的频率。
1条答案
按热度按时间ehxuflar1#
因此,Akka实际上提供了“最多一次交付”和保证交付(又名“至少一次交付”)两种选择。请参见评论中的the link user1234 posted,以了解“至少一次”与“最多一次”的概念。
所以Akka可以选择任何一种,为什么默认值是“最多一次”?
对你的问题的简短回答是,转向有保证的交付至少有五个非常显著的成本:
因此,Akka给了您选择的机会,但它也提醒您(在该文档中),对于大多数应用程序来说,通过应用程序代码处理消息传递失败要比依赖保证传递容易得多(这既是出于性能原因,也是因为保证传递本身也会带来一些问题,如重复消息和乱序消息)。
编辑:为了回应“最多一次”消息传递的可靠性,最好从弹性而不是“可靠性”的Angular 来考虑。换句话说,在正常情况下,“最多一次”和“至少一次”都会传递一条消息。
“最多一次”和“至少一次”的区别在于它们处理问题的方式。例如,假设一个示例应用程序将一百万条消息从节点A上的参与者A发送到节点B上的参与者B。在正常情况下,“最多一次”和“至少一次”都将具有100%的成功率。但是如果我在测试运行中间关闭节点B,“最多一次”应用程序将开始出现网络超时错误,一些消息将失败。然而,“至少一次”版本将保存所有消息到持久性一旦发送。我实际上可以关闭节点A和节点B,等待一个月,重新打开它们,系统将恢复,所有消息将已送达。
要理解的关键是,消息传递协议并不是天生就不可靠:不存在“通常有多少消息将失败”,因为消息在通常情况下即使在“最多一次”中也不会失败。如果您的硬件是100%可靠的并且您的网络是100%可靠的并且您的软件是100%可靠的,则无论使用哪种方法,您的消息都将100%送达。但如果您的网络出现故障,则使用“最多一次”,“至少一次”将丢失0%。如果您的目标服务器由于NPE而崩溃,“最多一次”将丢失100%的邮件,“至少一次”将丢失0%的邮件。
在正常情况下,所有的信息都会到达,唯一的问题是你经历异常情况的频率。