我需要原子广播,我想使用 akka 集群。
我不确定akka中是否有原子广播,所以我只想问一下,确定。
我知道,有这样的事情DistributedPubSubMediator.SendToAll
以及Cluster Aware Routers
. 有没有支持全点播的?
我的意思是原子(全序)广播,演员 A 发送广播 bA 以及演员 B 发送广播 bB(并行并从另一个节点)。最终,(每个参与者在 bB 之前收到消息 bA)或(每个参与者在 bA 之前收到消息 bB)。
我需要原子广播,我想使用 akka 集群。
我不确定akka中是否有原子广播,所以我只想问一下,确定。
我知道,有这样的事情DistributedPubSubMediator.SendToAll
以及Cluster Aware Routers
. 有没有支持全点播的?
我的意思是原子(全序)广播,演员 A 发送广播 bA 以及演员 B 发送广播 bB(并行并从另一个节点)。最终,(每个参与者在 bB 之前收到消息 bA)或(每个参与者在 bA 之前收到消息 bB)。
Akka 提供的唯一排序保证是从 actor 发送A
到 actor 的消息B
将按该对 actor 的顺序接收。其他参与者到参与者的消息可以在来自toB
的消息之前、之后或交错接收。A
B
所以不,Akka 不提供您要求的订购保证。
默认情况下,没有这样的保证,因为消息是异步发送的。但是您可以只使用一些调解器X
(包括 的任何参与者DistributedPubSubMediator
),这将导致这样的保证:发送(bA, recipients)
到,发送A
到,并且应该只将每条消息广播给它的接收者(它将是“原子的”和连续的,就像在一个演员内部所做的那样)。X
(bB, recipients)
B
X
X
如果您需要在集群中执行此操作 - 您可以尝试“集群单例”通过牺牲高可用性和分区容错来避免单点故障(您必须手动从集群中删除节点以允许“P”)