如果消息不可靠,如何订购Akka消息?

时间:2014-04-16 04:33:19

标签: scala akka

我读到在任何两个演员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,我在这里做出了错误的假设。但是,如果两个演员都在互联网上,那不是这样吗?如果它消息并忘记了消息?

1 个答案:

答案 0 :(得分:3)

正如文档所述,如果演员A1向演员M1发送消息M2M3A2,那么这些消息将按此顺序发送*相对于从A1发送到A2的邮件。如果A3也向A2发送消息,则无法保证来自A1A3的消息将如何交错。来自A3的消息可能来自A1的两封消息。相对于来自A1的其他邮件,来自A1的邮件仍然有序。

所以在你的例子中,(1,4,3)保证不会发生。 (1,3,4)是有效的,因为任何消息都可以被删除但如果3被传递,它保证在4之前被传递。