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