Akka分布式发布订阅保证

时间:2016-01-31 00:53:29

标签: akka publish-subscribe akka-cluster

我在Akka文档中找不到这个问题的答案。

我知道按顺序发布到同一主题的两条消息保证以相同/正确的顺序到达。如果我将两条消息发布到两个不同的主题 - 它们是否也保证以正确的顺序到达?如果没有,我可以使用哪种范例来确保这一点?注意:有一个很好的理由说明我没有将这些消息发布到同一主题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我应该警告说这是我的理解。似乎Distributed Pub Sub中的主题由actor烘焙。每个主题都保留一个订阅者列表。 pub子目录中的消息传递将遵循任何一对演员之间相同的传递和排序保证。

我想解决第一条评论,即发送/发布到同一主题的消息保证以他们发送的相同顺序发送。这仅适用于一个订户。在这种情况下,主题是演员,订阅者是另一个演员。所以消息将按顺序传递(如果有的话)。但是,如果我有两个订阅者(S1和S2)到同一主题,并且我将消息A和B发布到同一主题,则完全可能在A传递到A之前将B(和A)都传递到S1。 S2。

看来,发送到不同主题的消息也没有任何排序保证。如果您需要这种排序,似乎您需要将其编码到您的消息传递协议本身(例如序列号,矢量时钟等)。

此外,无论一个主题还是两个主题,对于您的用例,您可能需要考虑其他问题,例如至少需要一次消息语义。原因是即使有一个主题,我也无法保证在第二个主题之前传递到主题的第一条消息。我可以保证,如果第一条消息和第二条消息被传递(没有丢失),那么第一条消息将在第二条消息之前到达。但是第一个可能根本没有交付,第二个可能在没有订户看到第一个的情况下到达。这适用于将消息发送到同一主题以及不同主题。

如果你真的需要这个,你可能需要评估可靠的代理模式:http://doc.akka.io/docs/akka/current/contrib/reliable-proxy.html

其他成员的反馈表示欢迎......