akka有原子广播吗?

Is there atomic broadcast in akka?

我需要原子广播,我想使用akka集群。

我不确定akka中有没有原子广播,所以我只是想问一下,确定一下。

我知道,有DistributedPubSubMediator.SendToAll,还有Cluster Aware Routers。有没有支持全单广播的?

通过原子(总顺序)广播我的意思是,参与者 A 发送广播 bA 以及参与者 B 发送广播 bB(并行并从另一个节点)。最终,(每个演员在 bB 之前收到消息 bA)或(每个演员在 bA 之前收到消息 bB)。

Akka 提供的唯一顺序保证是从 actor A 发送到 actor B 的消息将按照这对 actor 的顺序接收。从其他演员到演员 B 的消息可以在从 AB 的消息之前、之后或与 B 的消息交错接收。

所以不,Akka 不提供您要求的订购保证。

默认情况下不保证消息是异步发送的。但是你可以只使用一些中介 X(包括 DistributedPubSubMediator 在内的任何参与者),这将导致这样的保证:将 (bA, recipients)A 发送到 X,发送 (bB, recipients)BX,并且 X 应该只向其收件人广播每条消息(它将是 "atomic" 和顺序的,就像在一个演员内部所做的那样)。

如果您需要在集群中执行此操作 - 您可以尝试 "Cluster Singleton" 通过牺牲高可用性和分区容错性来避免单点故障(您将不得不从集群中手动删除节点以允许"P")