在使用一致性哈希时,你能决定哪些参与者使用哪些密钥吗?
Can you decide which actors take which keys when using consistent hashing?
我对 Akka .NET 一致性哈希路由器进行了一些试验。在我看来,虽然您可以指定用于散列的密钥,但路由器决定如何在参与者之间分配密钥。
我本来想做一些事情,比如 Actor A 接收类型 A 的消息,Actor B 接收类型 B 的消息,等等。使用一致的哈希路由器完全可以做到这一点吗?
不,现有路由器不可能。
您可以使用 EventBus (Context.System.EventStream.Subscribe(Self, typeof<MyMessage>);
) 为您的 actor 订阅特定消息类型,并通过调用 system.EventStream.Publish(new MyMessage());
发布它们 - 这样发布的消息将发送给所有订阅者。该方法的局限性在于它仅适用于单个 ActorSystem 的范围。
对于分布式 publish/subscribe 场景,您可以使用 Akka.Cluster.Tools 插件,它公开了这样的选项。但是请记住,在这种情况下,订阅密钥是字符串而不是消息类型。
我对 Akka .NET 一致性哈希路由器进行了一些试验。在我看来,虽然您可以指定用于散列的密钥,但路由器决定如何在参与者之间分配密钥。
我本来想做一些事情,比如 Actor A 接收类型 A 的消息,Actor B 接收类型 B 的消息,等等。使用一致的哈希路由器完全可以做到这一点吗?
不,现有路由器不可能。
您可以使用 EventBus (Context.System.EventStream.Subscribe(Self, typeof<MyMessage>);
) 为您的 actor 订阅特定消息类型,并通过调用 system.EventStream.Publish(new MyMessage());
发布它们 - 这样发布的消息将发送给所有订阅者。该方法的局限性在于它仅适用于单个 ActorSystem 的范围。
对于分布式 publish/subscribe 场景,您可以使用 Akka.Cluster.Tools 插件,它公开了这样的选项。但是请记住,在这种情况下,订阅密钥是字符串而不是消息类型。