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已经到达,但是由于排序,我们不能在没有消息2的情况下处理消息3.

在点d)消息2已丢失.

因此,如果我按照我的理解应用规则,则演员B将仅处理消息1并且不会处理消息3和4.我的逻辑是否正确?我假设消息可以按任何顺序到达演员B,我在这里做出了错误的假设.但是,如果两个演员都在互联网上,那不应该是这样吗?如果它消息并忘记了消息?

解决方法

正如文档所述,如果演员A1将消息M1,M2和M3发送给演员A2,则这些消息将按照从A1到A2发送的消息的顺序*传递.如果A3也向A2发送消息,则无法保证A1和A3的消息将如何交错.来自A3的消息可以在来自A1的两条消息之间到达.来自A1的消息仍然相对于来自A1的其他消息有序.

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

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...