我读到在任何两个演员A和B之间订购Akka消息,如果A按顺序1,2,3,4发送消息,他们必须按顺序到达。
我还读到Akka消息不可靠。
这两件事怎么可能是真的?如果消息到达1然后是4然后是3,但是2从未发送过,那么会发生什么?
http://doc.akka.io/docs/akka/snapshot/general/message-delivery-reliability.html
澄清,如果消息1 2 3和4存在并且从演员A按顺序发送。
让我们考虑这些是a),b),c)d)。
a)在演员B,消息1到达。
b)然后在演员B处,消息4到达。
c)然后在演员B消息3到达。
d)消息2丢失了。
在a)点我看不出问题,演员B处理消息。
在b)点我看到一个问题,由于消息排序规则,演员B如何处理此消息4,演员B期待消息2到达。所以我想在这一点上,演员B不能处理消息4,因为消息4不能在消息2之前进行处理。
在c)点,消息3已经到达,但由于订购,我们无法处理消息3而没有消息2.
在d点,消息2已丢失。
因此,如果我按照我的理解应用规则,则演员B将仅处理消息1并且不会处理消息3和4。我的逻辑是否正确?我假设消息可以按任何顺序到达演员B,我在这里做出了错误的假设。但是,如果两个演员都在互联网上,那不是这样吗?如果它消息并忘记了消息?
答案 0 :(得分:3)
正如文档所述,如果演员A1
向演员M1
发送消息M2
,M3
和A2
,那么这些消息将按此顺序发送*相对于从A1
发送到A2
的邮件。如果A3
也向A2
发送消息,则无法保证来自A1
和A3
的消息将如何交错。来自A3
的消息可能来自A1
的两封消息。相对于来自A1
的其他邮件,来自A1
的邮件仍然有序。
所以在你的例子中,(1,4,3)保证不会发生。 (1,3,4)是有效的,因为任何消息都可以被删除但如果3被传递,它保证在4之前被传递。