作为分布式发布订阅保证

Akka Distributed Publish Subscribe Guarantees

我一直无法在 Akka 文档中找到这个问题的答案。

我知道按顺序发布到同一主题的两条消息保证按 same/correct 顺序到达。如果我将两条消息发布到两个 不同的 主题 - 它们是否也能保证以正确的顺序到达?如果不是,我可以使用什么范例来确保这一点?注意:我没有将这些消息发布到同一主题是有充分理由的。

感谢您的帮助。

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

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

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

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

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

欢迎其他会员反馈...